2017-03-09 70 views
4

我正在观察包含单个表情符号的VARCHAR字段的一些奇怪的MySQL行为。连接,数据库和列都是utf8mb4编码和整理。MySQL为单个表情符号返回多个结果

有一个表categoriesidtitle字段。有三行,标题是,和。

当我运行一个查询查找具有标题的行时,我也获得了所有其他单行emojis行,就像MySQL将它们视为相同的字符一样。

Query for credit card emoji returning all other single emoji rows

预期的行为应该是只有一行返回。

回答

1

你需要整理utf8mb4_unicode_520_ci;较旧的排序规则将Emoji视为平等。

+0

要查看带有Unicode 9.0的MySQL 8.0,请参阅[_here_](http://mysql.rjweb.org/utf8mb4_collat​​ions.html)中的'utf8mb4_0900_ai_ci'。 –

2

整理确定两个字符是否被认为是相等的。

https://dev.mysql.com/doc/refman/5.7/en/charset-unicode-sets.html

如果你只想要一个确切的二进制比赛,你可能需要指定二进制排序。

这里的一些语法示例为latin1

https://dev.mysql.com/doc/refman/5.7/en/case-sensitivity.html

+0

事实上,问题似乎与'utf8mb4_general_ci'一样,而'utf8mb4_unicode_ci'与预期的emoji一起使用。 – maknz

+1

@maknz - 你的测试出错了; unicode是不够的;你需要unicode_520;看到我的答案。 –

+0

使用'utf8mb4_unicode_ci'解决了这个问题,520做unicode本身不能做什么? – maknz