在MySQL中搜索表情符号

时间:2015-02-11 19:36:23

标签: mysql utf-8 character-encoding emoji utf8mb4

我有一个看起来像这样的字符串:

Six emojis in a row

现在,当我的应用程序将此字符串推入其utf8 mysql数据库列时,它在MySQL CLI中看起来像这样:

String representation

如果我选择convert(mystring using utfmb4),它仍然是这样的。

如果我使用select hex(mystring) from mytable;将其变为十六进制,它看起来像这样:

C3A2CB9CE282ACC3AFC2B8C28FC3B0C5B8C592CB86C3B0C5B8C592C5A0C3B0C5B8C592C281C3B0C5B8E280A1C2ACC3B0C5B8E280A1C2A7

现在,假设我想在其中找到带有表情符号波形的字符串。那么,wave表情符号的十六进制是F09F8C8A。但F09F8C8A不在上面的十六进制中,因此像select * from mytable where hex(mystring) like '%F09F8C8A%';这样的东西不起作用。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

我称之为“双重编码”。你的客户声称它有latin1字符,但告诉MySQL他们应该是utf8,所以一个3字节的utf8字符在数据库中被转换为6字节。

您需要修复表中的客户端和数据。 此链接讨论它:http://mysql.rjweb.org/doc.php/charcoll。 (对不起,没有关于如何解决问题的简要摘要。) issuesfixes