MySQL的正则表达式的UTF
我试图通过REGEX
从或没有特殊的utf-8字符的MySQL
数据库中获取数据。
让我来举例说明一下:
如果用户输入像sirena
这样的单词,它应该返回包含诸如sirena
, siré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