BLOGTIMES
2006/08/01

MySQLの正規表現で日本語を使えるようにする

  mysql 
このエントリーをはてなブックマークに追加

MySQL は日本語の処理が怪しいところがあり、LIKE などは大丈夫なのですが、REGEXP は日本語が正しく扱えません

昔、この仕様を知らずにREGEXP を使ってしまいエライ目にあったことがありますが、その時に「これって正規表現エンジンの日本語対応だけだから、誰か Oniguruma あたりを組み込んだモジュールを作ってくれてないかなぁ」いうことがふと頭をよぎったんですが、納期が近かったのでろくに調べもしないでそのままになっていました。

やっぱり同じことを考えてる人がいるものなんですね、mregexpというそのものずばりのプロダクトを見つけてしまいました。

mregexp - MySQLで日本語の正規表現を扱う

今のところ(mysql 4.0.18, 4.1.1)、MySQLのREGEXP関数は日本語を正しく処理できない(一方、LIKEやSUBSTRINGなどは日本語の処理に対応している)。 そこで日本語を正しく扱える正規表現関数、mregexpというものをユーザー定義関数(UDF=User Defined Function)という仕組みを用いて作った。

SQL において Where節 に REGEXP を使うというのはパフォーマンスを考えるとあまり薦められない*1わけですが、場合によってはどうしても使わざるを得ないような状況になることがあります。そういうときにはこのプロダクトは大活躍しそうですね。

パフォーマンスがかなり気になるところですが、プロダクトのページのベンチマークによるときちんと LIKE などを併用して MySQL にテーブルをフルスキャンさせないように工夫すれば大丈夫なようです。

  • *1: インデックスが使われなくなってしまうので。

トラックバックについて
Trackback URL:
お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/1518
Trackbacks
このエントリにトラックバックはありません
Comments
愛のあるツッコミをお気軽にどうぞ。[policy]
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
コメントはありません
Comments Form

コメントは承認後の表示となります。
OpenIDでログインすると、即時に公開されます。

OpenID を使ってログインすることができます。

Identity URL: Yahoo! JAPAN IDでログイン