mysql正则表达式utf-8个字符

Maa*_*rty 7 regex mysql utf-8

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

让我解释一下例子:

如果用户输入的字像sirena它应该返回行,其中包括类的字眼sirena,siréna,šíre?á..等..也应该倒退,当他进入工作siréná应该返回相同的结果..

我试图通过搜索REGEX,我的查询看起来像这样:

SELECT * FROM `content` WHERE `text` REGEXP '[sšŠ][iíÍ][r????][eéÉ??][n??][AaáÁäÄ0]'
Run Code Online (Sandbox Code Playgroud)

它只适用于数据库中的单词sirena而不是单词时才有效siré?a.

是因为UTF-8和MySQL有关吗?(整理mysql列是utf8_general_ci)

谢谢!

Bil*_*win 6

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

请参阅Bug#30241正则表达式问题,该问题自2007年以来一直处于打开状态.在修复之前,他们必须更改他们使用的正则表达式库,并且我没有找到任何关于何时或是否会执行此操作的公告.

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

mysql> SELECT * FROM `content` WHERE HEX(`text`) REGEXP 'C3A9C588';
+----------+
| text     |
+----------+
| siré?a   |
+----------+
Run Code Online (Sandbox Code Playgroud)

你的评论:

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

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