勉強したことのメモ

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

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

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

あるシステムで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 / MariaDB データベース

  関連記事

SortableJSを使ってデータの並べ替え&保存
SortableJSを使ってデータの並べ替え&保存

あるシステムを拝見した際にtableタグ内に並んでいる項目をドラッグ&ド ...

MySQLでdatetime型データの〇日後を取得する方法(DATEDIFF)
MySQLでdatetime型データの〇日後を取得する方法(DATEDIFF)

MySQLでdatetime型データがあり、何日経過しているかを取得し、〇日経過 ...

MySQLでtime型データからint型データの減算を行い、減算後のデータで条件検索する方法
MySQLでtime型データからint型データの減算を行い、減算後のデータで条件検索する方法

MySQLでtime型データからint型データの減算を行い、減算後のデータを検索 ...

MySQLでランダムにデータを取得しつつページング機能も実装する方法
MySQLでランダムにデータを取得しつつページング機能も実装する方法

MySQLからデータを持ってくる際にランダムな表示を行ってほしいと言われた。ただ ...

MySQLでテーブル構造とデータをコピーする方法
MySQLでテーブル構造とデータをコピーする方法

MySQLで既にあるテーブルとデータに対して実験を行う必要があった。本番テーブル ...