勉強したことのメモ

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 データベース

  関連記事

WordPressでデータベース接続確立エラー発生時の対応方法
WordPressでデータベース接続確立エラー発生時の対応方法

WordPressで「データベース接続確立エラー」というエラー表示がされた。大抵 ...

mysqldumpが使えないレンタルサーバでMySQLのバックアップ
mysqldumpが使えないレンタルサーバでMySQLのバックアップ

mysqldumpが使えないレンタルサーバで開発を行うことがあり、尚且つ他社に使 ...

SQLで同じ値を複数のレコードに対してUPDATE
SQLで同じ値を複数のレコードに対してUPDATE

やりたかった事は、複数のレコードに対して 同じ値に更新したいというもの。 $sq ...

MySQLで指定カラムの文頭もしくは文末に文字を追記する方法
MySQLで指定カラムの文頭もしくは文末に文字を追記する方法

MySQLで特定カラムの文頭もしくは文末に年月日日時(YmdHis)を追記したい ...

MySQLでユーザー作成時にエラーが発生
MySQLでユーザー作成時にエラーが発生

SSHからrootアカウントでMySQLにログインし、ユーザーを作成しようとする ...