6838 検索機能 はくぶん 2015-09-22 15:45:06
MySQLの検索に“utf8_unicode_ci”という機能がある。
where句で、
[column] collate utf8_unicode_ci like '〜'
という風に使うと、“〜”の大文字小文字、全角半角、濁音半濁音の区別なしで[column]の中を検索する。
大文字小文字、全角半角の区別がないのは非常に便利だが、濁音半濁音の区別までなくなってしまうと、ちょっと不便だ。
“はっと”で検索すると、“ハット”“バット”“パット”“バッド”“パッド”が全てヒットする。

他に“utf8_general_ci”というパターンもあるが、こちらは大文字小文字の区別がないだけで、全角半角は区別される。
キーワード検索にはちょっと物足りない。
大文字小文字と全角半角の区別はなくて、濁音半濁音だけ区別するパターンが理想なのだが、残念ながらそれはないようだ。
最も便利な組合せだけないのは一体どういうことなのだろうか。

しかし、さらに困った事が。
上記の“utf8_unicode_ci”を使ってみたのだが、今までヒットしていた文字列が何もヒットしなくなってしまった。
SQLのバージョンが古くて、対応していないのか。
それとも他の原因か。
そんなことを考えながら、仕方なく“utf8_unicode_ci”を外してみた。
しかし、それでも何もヒットしない。
ん?ってことは、likeマッチが効いてないってことか?
普段はregexpだが、今回“utf8_unicode_ci”を使うために、like '%〜%'に変えたのである。
その途端、今までヒットしていたものが、何もヒットしなくなった。
う〜ん、likeはregexpよりも基本機能のはず。
それでヒットしないのは一体どういうことなんだ。
仕方ないので、全て元に戻す。
メッセージ文字数:745/768