MySQL 8.0 の正規表現のマルチバイト対応について

MySQL 8.0
この記事は最終更新から6年以上経過しています。内容が古くなっている可能性があります。

MySQL では以前から REGEXP を使った正規表現をサポートしてきましたが、MySQL 8.0 からは Henry Spencer regular expression library から ICU (International Components for Unicode のライブラリに変わりました。これによってユニコードがサポートされ、マルチバイトセーフになりました。

目次

検証

まずは MySQL 5.7 で文字コード設定を utf8mb4 にします

MySQLの再起動後、文字コードと照合順序を確認します。

下記のバグレポートではおそらくロシア語による正規表現で問題が発生していますが、日本語で同様の REGEXP による検索をしてみたいと思います。
MySQL :: WL#353: Better REGEXP package

"^[^ん]" の正規表現は “先頭文字が「ん」を含まない場合にマッチする” です。
なので期待する結果は 1 ですが、マッチせず 0 となっています。

MySQL 8.0 の場合の結果は以下のように期待通りの結果となりました。

まとめ

MySQLの正規表現はマルチバイトセーフではなかったため、今まであまり使われてこなかったと思いますが、MySQL 8.0 からは正しく動作するようになったので今後は広く使われるようになると思います。


 

 

スマートスタイルTECHブログについて

スマートスタイルTECHブログでは、日頃MySQLのサポート業務に従事している有資格者で構成された技術サポートチームがMySQLに関する技術情報を発信しています。データベースのお困りごとはお気軽にご相談下さい。

よかったらシェアしてね!
  • URLをコピーしました!
目次