7

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

让我举例说明:

如果用户输入类似的单词,sirena它应该返回包含诸如sirena, siréna, šíreňá.. 等单词的行。当他输入时它应该向后工作,siréná它应该返回相同的结果..

我正在尝试通过搜索它REGEX,我的查询如下所示:

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

它仅在数据库中为 word 时有效,sirena但在有 word 时无效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 有什么解决方案。

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

于 2013-11-04T19:02:12.933 回答
1

尝试类似...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])'

这个对我有用!

于 2014-03-07T04:52:08.370 回答
-3

直接在 mysql 中使用 mysql UDF 存储库中的 lib_mysqludf_preg 库用于 PCRE 正则表达式

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

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

于 2016-02-23T14:12:11.763 回答