我有一个如下所示的字符串:
现在,当我的应用程序将此字符串插入其 utf8 mysql 数据库列时,它在 MySQL CLI 中看起来像这样:
如果我选择convert(mystring using utfmb4)
,它仍然看起来像这样。
如果我使用 select hex(mystring) from mytable;
将其转换为十六进制,它看起来像这样:
C3A2CB9CE282ACC3AFC2B8C28FC3B0C5B8C592CB86C3B0C5B8C592C5A0C3B0C5B8C592C281C3B0C5B8E280A1C2ACC3B0C5B8E280A1C2A7
现在,假设我想查找其中包含表情符号波浪的字符串。那么,波浪表情符号的十六进制是 F09F8C8A
。但是 F09F8C8A
不在上面的十六进制中,因此像 select * from mytable where hex(mystring) like '%F09F8C8A%';
这样的东西不起作用。
有什么建议吗?
最佳答案
我称之为“双重编码”。您的客户声称它正在获取 latin1 字符,但告诉 MySQL 它们应该是 utf8,因此 3 字节 utf8 字符在数据库中转换为 6 字节。
您需要修复客户端和表中的数据。 此链接对此进行了讨论:http://mysql.rjweb.org/doc.php/charcoll 。 (抱歉,没有关于如何解决您的问题的简短摘要。) issues和 fixes .
关于mysql - 在 MySQL 中搜索表情符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28462979/