スマートスタイル TECH BLOG

データベース&クラウド技術情報

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

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 からは正しく動作するようになったので今後は広く使われるようになると思います。


MySQL

 

Return Top