mysql - 在 MySQL 中搜索表情符号

标签 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

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

有什么建议吗?

最佳答案

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

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

关于mysql - 在 MySQL 中搜索表情符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28462979/

相关文章:

php - 如何在不查询整个数据库的情况下检查重复条目?

mysql - 了解 Rails 中与 ActiveRecord 的关系

MySQL 查询以获取用户未关注的帖子列表

arrays - 使用Jackson以UTF-8编码将Java列表转换为JSON数组

unicode - 什么是 Unicode、UTF-8、UTF-16?

c# - UTF8编码不加字节序标记

python - 使用Python和请求抓取网页时的字符集问题

php - 尝试在 php 中使用 count(*) 时收到 undefined variable

perl - 读取文件时自动检测字符编码

javascript - 如何提交数据转换为Big5的表单