在 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
编码而不是utf8
(utf8mb3
的同义词)作为存储编码(服务器端)和所有连接的编码(客户端)。
【讨论】:
【参考方案2】:这对我有用!
将表格的字符集更改为utf8mb4
,将排序规则更改为utf8mb4_unicode_ci
。最后,将要存储表情符号的列的数据类型更改为blob
或longblob
。
【讨论】:
以上是关于在 MySQL 中存储 emoji 得到不正确的字符串值错误的主要内容,如果未能解决你的问题,请参考以下文章