勉強したことのメモ

Webエンジニア / プログラマが勉強したことのメモ。

MySQLで全角半角を区別せずに検索する方法(collate utf8_unicode_ci)

   2021/07/03  MySQL データベース

あるシステムでMySQLの検索時に「WHERE test_column collate utf8_unicode_ci LIKE '%hogehoge%';」という一文があった。「collate utf8_unicode_ci」の部分は見たことのない記述だったので調べてみると全角半角を区別せずに検索できると言うものらしい。以下にメモ。

 

collateとは

照合順序の指定らしい。「あ」「ア」「ア」を小さい方から並べたらどうなるか、といったような順序を決めるのが照合順序となる。

 

utf8_unicode_ciとは

大文字・小文字・全角・半角を区別しない。

 

collateとutf8_unicode_ciを合わせると

大文字・小文字・全角・半角を区別しないよう照合順序を指定する、となるっぽい。その為、冒頭の「WHERE test_column collate utf8_unicode_ci LIKE '%hogehoge%';」の記述の状態で「あああ」と検索した場合は「あああ」「アアア」「アアア」がヒットする。

 

全角半角を区別したい場合

照合順序が「utf8_general_ci」だとアルファベットの大文字小文字は区別しないが、それ以外は全て区別するとのこと。その為、全角半角で区別したい場合は「WHERE test_column collate utf8_general_ci LIKE '%hogehoge%';」となる。

 

所感

最初SQL文を見たときは文字化け対策か何かかと思っていたけどぜんぜん違うかった。勉強になった。

 

参考サイト

https://www.dbsheetclient.jp/blog/?p=1765

https://cpoint-lab.co.jp/article/201712/706/

 - MySQL データベース

  関連記事

MySQLでホスト指定しても正常に接続できない場合

MySQL自体は動いており、ユーザーも登録されているのに、ホスト名を指定しても正 ...

MySQLのintのカラムで2147483647の値

MySQLでintのカラムに数値を入れると「2147483647」という値になっ ...

MySQLのバックアップファイルを簡単に作成できるライブラリ「myphp-backup」の利用方法

MySQLのバックアップを取る際にadminerとかから手動で対応するのではなく ...

MySQLにてSELECT時にdate型のカラムから和暦を計算し表示する方法

MySQLにdate型のカラムに誕生年月日が格納されており、そこから和暦を計算し ...

MySQLにてdate型のカラムから曜日を計算し表示する方法

MySQLにてdateもしくはdatetime型のデータを取り出して曜日もあわせ ...