Site cover image

Site icon image 制作メモ

Description is here. The icon, the title, the description can be modified in Notion.

[MySQL] 半角/全角、大文字/小文字、ひらがな/カタカナを区別しないSQL文(あいまい検索)

半角/全角、大文字/小文字、ひらがな/カタカナがごちゃまぜでもヒットさせるSQL文です。

例えば、抽出対象が「さまぁ~ず」というワードであれば、

・サマァ~ズ

・サまァ~ズ

・さまあ~ず

でもヒットします。

逆に、

・さまーず

・さまぁーず

・さまぁ~ズ

・バカルディ

ではヒットしません。

「さまぁ~ズ」はいけそうな気がしてしまいますが、ズが「ス+濁点」になるので残念ながらヒットしません。

そんなさまぁ~ずのためのSQL文がこちら。

SELECT * FROM `table_name` col_name COLLATE utf8mb4_unicode_ci LIKE '%キーワード%'

COLLATE照合順序を指定して、LIKE 演算子でマッチさせます。

照合順序はデータベース側でテーブルごとに設定されているので、期待通りの抽出ができているならば指定は不要です。

照合順序の記述方法は、文字コード_言語名_比較法で指定します。

文字コード utf8、utf8mb4、sjis、latin1 など
utf8mb4 に対応しているのは MySQL 5.5 から。
utf8 と utf8mb4 の違いは、
utf8 3バイトまで対応
utf8mb4 4バイトまで対応
言語名 general、unicode など
unicode 半角全角を区別しないgeneral 半角全角を区別する
比較法 ci 大文字小文字を区別しない
cs 大文字小文字を区別する
bin すべて区別する
※比較法を bin にした場合、言語名は指定できない

よりあいまいに検索するなら半角/全角、大文字/小文字を区別しない照合順序にしてあげればいいので、

_unicode_ci にしておけばよいでしょう。

いやいや、「さまぁ~ず」以外認めないよって人は、_bin でガッチガチにしておきましょう。