[英]mysql regex utf-8 characters
我正在嘗試通過REGEX
從MySQL
數據庫獲取數據,帶或不帶特殊的utf-8字符。
讓我解釋一個例子:
如果用戶輸入sirena
之類的單詞,則應返回包含sirena
, siré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.