okinawa

IT勉強メモ

全角カタカナでLIKE検索すると半角カタカナの濁点・半濁点がヒットしない問題

utf8_unicode_ci

utf8_unicode_ciを指定すると半角カナ、全角カナ、ひらがな、カタカナを区別せず、かなり広範囲にわたってマッチするようになる。

濁点・半濁点が付いていても無視する。

SELECT * FROM hoge WHERE bigName collate utf8_unicode_ci LIKE '%keyword%'

ただし、全角半角カタカナの濁点、半濁点付きのLIKE検索はマッチしない。

例:全角カタカナ「プ」「ゲ」でLIKE検索すると半角カタカナ「プ」「ゲ」がヒットしない。逆もダメ。

じゃあどうするの?

REPLACEで濁点半濁点を消す。

SELECT * FROM skill WHERE(REPLACE(REPLACE(bigName, '゙', ''), '゚', '') collate utf8_unicode_ci LIKE REPLACE(REPLACE(?0, '゙', ''), '゚', ''))

REPLACEで2回くくって濁点と半濁点を消している。

できればやりたくない。

ちなみにイコール検索なら大丈夫。

MySQLのCollation

MySQLのCollationは下記が無難かと。

  • utf8mb4_general_ci
  • utf8mb4_bin

は ぱ ば を区別してくれます。

参考

qiita.com

tmge.hatenablog.com

qiita.com

結論

DBに半角カタカナを登録するのやめよう!

どうしてもって言うなら半角全角カタカナを混在させるのやめよう!!!

すごいめんどくさかった!!!!!!

もしくはutf8mb4_general_ciかutf8mb4_binを使おう。