簡體   English   中英

mysql regex utf-8字符

[英]mysql regex utf-8 characters

我正在嘗試通過REGEXMySQL數據庫獲取數據,帶或不帶特殊的utf-8字符。

讓我解釋一個例子:

如果用戶輸入sirena之類的單詞,則應返回包含sirenasirénašíreňá ..等單詞的行。也應在用戶輸入siréná時向后工作,並應返回相同的結果。

我正在嘗試通過REGEX搜索它,我的查詢如下所示:

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

它僅在數據庫中的單詞sirena時有效,而在單詞siréňa ..時siréňa

是因為UTF-8和MySQL有問題嗎? (mysql列的排序規則是utf8_general_ci

謝謝!

MySQL的正則表達式庫不支持utf-8。

請參見Bug#30241正則表達式問題 ,該問題自2007年以來一直處於打開狀態。在必須解決之前,他們將不得不更改使用的正則表達式庫,而且我還沒有發現何時或是否會這樣做的任何公告。

我見過的唯一解決方法是搜索特定的HEX字符串:

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

發表您的評論:

不,我不知道MySQL有任何解決方案。

您可能必須切換到PostgreSQL,因為RDBMS在其正則表達式語法中支持UTF字符的\\u\u003c/code>代碼。

嘗試類似... REGEXP '(a|b|[ab])'

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

這個對我有用!

將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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM