勉強したことのメモ

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でスレッドの実行状況を表示しスレッドの経過時間チェックや特定スレッドを強制終了する方法

データベースサーバが重たく、原因を調査する機会があった。サーバ自体のメモリやCP ...

phpMyAdminでのエクスポート/インポート

DBのバックアップを取る際にエクスポート/インポートを行うが、 データ件数が多い ...

MySQLで検索した件数の取得

ページングとかで必要になる総件数について、 いつもググってしまっていたのでメモ。 ...

Codeigniter4でMySQLに接続しCRUD操作する方法

Codeigniter4.4.4でMySQLに接続しCRUD操作したい。また、任 ...

MySQLで歯抜けになっているint型の数値を取得する

MySQLで歯抜けになっているシーケンス番号を 取得したいケースがあった。 ■ソ ...