我正在观察包含单个表情符号的VARCHAR字段的一些奇怪的MySQL行为。连接,数据库和列都是utf8mb4编码和整理。MySQL为单个表情符号返回多个结果
有一个表categories
与id
和title
字段。有三行,标题是,和。
当我运行一个查询查找具有标题的行时,我也获得了所有其他单行emojis行,就像MySQL将它们视为相同的字符一样。
预期的行为应该是只有一行返回。
我正在观察包含单个表情符号的VARCHAR字段的一些奇怪的MySQL行为。连接,数据库和列都是utf8mb4编码和整理。MySQL为单个表情符号返回多个结果
有一个表categories
与id
和title
字段。有三行,标题是,和。
当我运行一个查询查找具有标题的行时,我也获得了所有其他单行emojis行,就像MySQL将它们视为相同的字符一样。
预期的行为应该是只有一行返回。
你需要整理utf8mb4_unicode_520_ci
;较旧的排序规则将Emoji视为平等。
整理确定两个字符是否被认为是相等的。
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
要查看带有Unicode 9.0的MySQL 8.0,请参阅[_here_](http://mysql.rjweb.org/utf8mb4_collations.html)中的'utf8mb4_0900_ai_ci'。 –