MySQLでの異体字対応検索

  • IT

天理教教会地図検索で異字体も含めて検索できるよう対応した記事を書きましたが、技術的な説明をしたいと思います。

現在利用している環境は、文字コードはUTF-8、データベースはMySQL 5.7、言語はPHP7.4.15です。

異体字の処理は、Unicodeの異体字セレクタや、MySQLのCOLLATEなどの機能でなんとかなりそうですが、なんともならないようです。
異体字の一覧があれば、力技でなんとかなりそうなので調べたところ、お~まち様の異体字も含めて検索したい デモ版のソースを流用させてもらうことにしました。
※お~まち様、ありがとうございます。

次に、MySQLでの検索処理ですが、LIKEやINで無く、拡張正規表現のREGEXPを使います。
例えば、高崎ですと、
SELECT * FROM table WHERE name REGEXP '[高髙][崎㟢﨑?嵜埼碕]'
で良いかと思いきや、マルチバイトの日本語には対応していないので、
SELECT * FROM table WHERE name REGEXP '(高|髙)(崎|㟢|﨑|?|嵜|埼|碕)'
と文字列として処理すると、望みの結果がでます。(この記事では石へんの﨑が文字化けしています...)
※日本語でも使えるユーザー定義関数mregexpもありますが、レンタルサーバではインストールできなさそうなので未確認です。

PHPの関数にしてあるので、よかったらお使いください。
itaiji.php
※PHP7.4.0以上で使えるmb_str_splitを利用しているので、ご注意ください。


最初に作ったitaiji.phpのファイルサイズが115KBと大きいので、
処理を変更して67KBと小さくしました。
JavaScriiptなら意味があるのでしょうが、なんとなく気になり...

また、当サイトの検索の使い勝手を考え、「の」「ノ」「之」「乃」を異体字としました。
新しいitaiji.phpは、こちらをお使いください。

コメントする

※ コメントは認証されるまで公開されません。ご了承くださいませ。

公開されません

(いくつかのHTMLタグ(a, strong, ul, ol, liなど)が使えます)

このページの上部へ

プロフィール

名前:いと
性別:♂
mail: msnr@msnr.net

一言:まぁそれなりに、だらだら生きている、自転車好きの元プログラマです。会社勤めを辞め、 修養科を無事に修了することができ、 道専務をさせていただくことになりました。
2007年4月より大教会で青年づとめをさせていただき、2011年1月より自教会に戻りました。
させて頂くことを手探りな状態ですが、勇んでつとめさせていただきます。

サイト内検索

最近のピクチャ

最近のコメント

Powered by Movable Type 7.903.0