7

特別な utf-8 文字の有無にかかわらず、MySQLデータベースからデータを取得しようとしています。REGEX

例で説明しましょう:

ユーザーが次のような単語を入力すると、 、、.. などのsirena単語を含む行が返されます。また、入力時に逆方向に動作し、同じ結果が返されます。sirenasirénašíreňásiréná

で検索しようとしてREGEXいますが、クエリは次のようになります。

SELECT * FROM `content` WHERE `text` REGEXP '[sšŠ][iíÍ][rŕŔřŘ][eéÉěĚ][nňŇ][AaáÁäÄ0]'

データベースに単語sirenaがある場合にのみ機能しますが、単語がある場合は機能しませんsiréňa..

UTF-8とMySQLの何かが原因ですか?(mysql カラムの照合はutf8_general_ci)

ありがとうございました!

4

3 に答える 3

6

MySQL の正規表現ライブラリは utf-8 をサポートしていません。

バグ #30241 正規表現の問題を参照してください。これは 2007 年から公開されています。修正する前に、使用する正規表現ライブラリを変更する必要があります。これを行う時期や場合についての発表は見つかりませんでした。

私が見た唯一の回避策は、特定の HEX 文字列を検索することです。

mysql> SELECT * FROM `content` WHERE HEX(`text`) REGEXP 'C3A9C588';
+----------+
| text     |
+----------+
| siréňa   |
+----------+

あなたのコメントについて:

いいえ、MySQL での解決策は知りません。

RDBMS は正規表現構文\uで UTF 文字のコードをサポートしているため、PostgreSQL に切り替える必要がある場合があります。

于 2013-11-04T19:02:12.933 に答える
-3

mysql UDF リポジトリの lib_mysqludf_preg ライブラリを mysql で直接 PCRE 正規表現に使用する

MySQL の正規表現ライブラリは utf-8 をサポートしていませんが、mysql UDF リポジトリには、mysql で直接 PCRE 正規表現に従って utf-8 互換の正規表現を使用する機能があります。

http://www.mysqludf.org/ https://github.com/mysqludf/lib_mysqludf_preg#readme

于 2016-02-23T14:12:11.763 に答える