MySQLで全角半角を区別せずに検索する方法(collate utf8_unicode_ci)
2021/07/03
あるシステムで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文を見たときは文字化け対策か何かかと思っていたけどぜんぜん違うかった。勉強になった。
参考サイト
関連記事
-
-
SQLで同じ値を複数のレコードに対してUPDATE
やりたかった事は、複数のレコードに対して 同じ値に更新したいというもの。 $sq ...
-
-
MySQLにてSELECT時にdate型のカラムから干支(十二支)を計算し表示する方法
MySQLにdate型のカラムに誕生年月日が格納されており、そこから干支(十二支 ...
-
-
MySQLでINSERT時にオートインクリメントではないカラムに連番を登録する方法
MySQLでINSERT時にオートインクリメントではないカラムに連番を登録したい ...
-
-
MySQLでdatetime型のカラムから秒は省いて検索する方法
MySQLでdatetime型のカラムに対して「2022-10-07 10:30 ...
-
-
PHP / MySQLで2038年問題の対策
先日打ち合わせの際に「タイムスタンプを使ってユニークキーに云々~~」といったよう ...