0

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

连续六个表情符号

现在,当我的应用程序将此字符串推入其 utf8 mysql 数据库列时,它在 MySQL CLI 中如下所示:

字符串表示

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

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

C3A2CB9CE282ACC3AFC2B8C28FC3B0C5B8C592CB86C3B0C5B8C592C5A0C3B0C5B8C592C281C3B0C5B8E280A1C2ACC3B0C5B8E280A1C2A7

现在,假设我想在其中找到带有表情符号的字符串。好吧,波浪表情符号的十六进制是F09F8C8A. 但F09F8C8A不在上面的十六进制中,所以类似的东西select * from mytable where hex(mystring) like '%F09F8C8A%';不起作用。

有什么建议么?

4

1 回答 1

1

我称之为“双重编码”。您的客户声称它正在获取 latin1 字符,但告诉 MySQL 它们应该是 utf8,因此 3 字节 utf8 字符在数据库中转换为 6 字节。

您需要修复客户端和表中的数据。 这个链接讨论它:http: //mysql.rjweb.org/doc.php/charcoll。(抱歉,没有关于如何解决您的问题的简要总结。问题修复

于 2015-02-23T23:46:13.450 回答