MySQL的正则表达式的UTF

我试图通过REGEX从或没有特殊的utf-8字符的MySQL数据库中获取数据。

让我来举例说明一下:

如果用户输入像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

谢谢!


MySQL的正则表达式库不支持utf-8。

请参见错误#30241正则表达式问题,自2007年以来一直开放。他们将不得不更改它们使用之前可以修复的正则表达式库,并且我还没有发现任何何时或是否会这样做的公告。

我见过的唯一解决方法是搜索特定的HEX字符串:

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

重新评论:

不,我不知道MySQL的任何解决方案。

您可能必须切换到PostgreSQL,因为该RDBMS支持正则表达式语法中UTF字符的u代码。


尝试像... 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中使用mysql UDF存储库中的lib_mysqludf_preg库作为PCRE正则表达式

尽管MySQL的正则表达式库不支持utf-8,但mysql UDF存储库可以直接在mysql中根据PCRE正则表达式使用utf-8兼容正则表达式。

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

链接地址: http://www.djcxy.com/p/17025.html

上一篇: mysql regex utf

下一篇: Recompile Nginx with additional modules