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文を見たときは文字化け対策か何かかと思っていたけどぜんぜん違うかった。勉強になった。
参考サイト
関連記事
- 
					
													  
- 
					MySQLでテーブルとデータの複製(コピー)する方法MySQLでテーブルとデータを複製したかった。ダンプとかではなく、簡単なSQL文 ... 
- 
					
													  
- 
					MySQLでテキスト(日本語、半角英数字)を暗号化・復号化する方法MySQLでデータを登録する際に暗号化したいというケースがあった。対象のデータは ... 
- 
					
													  
- 
					MySQLで開始から終了日付内を調べたいとき等号不等号でもできるけど、BETWEENというのがよさそう。 ■参考サイト ht ... 
- 
					
													  
- 
					MySQLで検索した件数の取得ページングとかで必要になる総件数について、 いつもググってしまっていたのでメモ。 ... 
- 
					
													  
- 
					MySQLでREGEXPについてSQL文にREGEXPというのを見てこれ何? となったのでメモ。 ■参考サイト ...