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 | |||