在 MySQL 中存储 emoji 得到不正确的字符串值错误

Posted

技术标签:

【中文标题】在 MySQL 中存储 emoji 得到不正确的字符串值错误【英文标题】:Storing emoji's in MySQL getting incorrect String value error 【发布时间】:2016-09-08 08:34:06 【问题描述】:

我正在存储包含表情符号的数据,数据以 json 形式出现,所以当我检索它时就像

“Giggs'ern har vært å koset seg igjen(方括号) Dette er en fillesak”

当我将它存储到 mysql 时,我收到了这个错误:

2016-05-0213:12:45.582 [错误] pool-1-thread-1 org.hibernate.engine.jdbc.spi.SqlExceptionHelper - 不正确的字符串 值:'\xF0\x9F\x98\x8A\x0A<...' 第 1 行的列 'comment'

我改变了 MySQL 数据库编码为utf8mb4 但并没有解决问题。

【问题讨论】:

几个问题:列是 varchar 还是 blob?您是否要存储表情符号的二进制或 base64 表示?您可以在调用 Hibernate 时提供这段代码吗?也许还有数据样本? 不幸的是,您还需要告诉 MySQL 驱动程序使用 Unicode。在连接字符串中,谷歌它。盒子也可以是没有表情符号的字体。 是的,该列是文本类型并仅存储字符串数据,我使用简单的 jdbc insert @sanF 您是否也更改了列的排序规则?我看到了其他类似的帖子,他们解决了将排序规则更改为utf8mb4_general_ci。也许这行得通。 是的,我已经更改了表和列的排序规则,但我仍然收到这样的日志 11:48:44,027 错误 SqlExceptionHelper:146 - 不正确的字符串值:'\xF0\x9F\x91\ x8D\xF0\x9F...' 用于列 'comment' 并获取 [?][?][?] 而不是表情符号 @SanF 【参考方案1】:

我认为您需要使用utf8mb4 编码而不是utf8utf8mb3 的同义词)作为存储编码(服务器端)和所有连接的编码(客户端)。

【讨论】:

【参考方案2】:

这对我有用!

将表格的字符集更改为utf8mb4,将排序规则更改为utf8mb4_unicode_ci。最后,将要存储表情符号的列的数据类型更改为bloblongblob

【讨论】:

以上是关于在 MySQL 中存储 emoji 得到不正确的字符串值错误的主要内容,如果未能解决你的问题,请参考以下文章

在不升级 mysql 的情况下直接使用 mysql utf8 存储 超过三个字节的 emoji 表情

mysql支持emoji表情上传

Mysql数据库存储emoji表情

mysql存储emoji问题

Java在mysql中存储emoji表情

php过滤文字中的表情字符和mysql服务端对emoji的支持