2015-02-11 82 views
0

搜索表情符号,我有一个字符串,它看起来像这样:在MySQL

Six emojis in a row

现在,当我的应用程序塞到这个字符串变成了UTF8的MySQL数据库列,它看起来像这样在MySQL命令行:

String representation

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

如果我把它用select hex(mystring) from mytable;诅咒,它看起来像这样:

C3A2CB9CE282ACC3AFC2B8C28FC3B0C5B8C592CB86C3B0C5B8C592C5A0C3B0C5B8C592C281C3B0C5B8E280A1C2ACC3B0C5B8E280A1C2A7

现在,让我们说,我想找到与它那表情符波串。那么,表情符号的十六进制是F09F8C8A。但是F09F8C8A不在上面的十六进制中,所以像select * from mytable where hex(mystring) like '%F09F8C8A%';这样的东西不起作用。

有什么建议吗?

+0

相关:https://stackoverflow.com/a/45421034/842935 – danihp 2017-08-01 09:37:31

回答

1

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

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