【发布时间】:2019-05-10 00:37:52
【问题描述】:
我想在我的数据库中搜索任何包含蝴蝶表情符号的字符串 - ???? - 使用 regexp。
例如
SELECT *
FROM `table`
WHERE `text`
REGEXP '????'
我使用REGEXP 是因为我可能想搜索Hello[[:space:]]world 或类似的。
我得到了错误
从正则表达式得到错误“在偏移量 0 处没有重复内容”
这行得通:
SELECT *
FROM `table`
WHERE `text`
LIKE '%????%'
但后来我失去了搜索flying[[:space:]]????的能力
我的排序规则是utf8mb4_unicode_ci。数据库是10.0.36-MariaDB
【问题讨论】:
-
如果它使用 utf-16,你应该使用代理对
'\uD83E\uDD8B',否则使用代码点'\U0001F98B' -
@sln - 问题中提供的文本是 UTF-8(十六进制
F09FA68B),而不是 utf-16。不要使用CHARACTER SET utf16,也不要使用\u代码。 -
@RickJames - 好的,没做多少研究。数字 1:如果使用 MySQL 8.0.4 或更高版本,则使用 ICU 正则表达式引擎。数字 2:必须转义反斜杠才能获得引擎的反斜杠。数字 3:ICU 中的代码点表示法使用构造
\x{}。数字 4:必须使用REGEXP关键字。数字 5:有时目标是 utf-16,否则是 utf-8/32。因此,如果您有已知的 mbcs,请先将其转换为 8/16/32。把它放在适当的位置,试试这个。REGEXP '\\x{D83E}\\x{DD8B}'或REGEXP '\\x{1F98B}' -
dbfiddle.uk/… 我选择了 MySQL 版本 8。我认为 mariadb 不像 MySQL 那样使用 ICU 引擎,因为它是正则表达式。所以,祝你好运..
标签: mysql regex unicode mariadb emoji