【问题标题】:Storing emoji's in MySQL getting incorrect String value error在 MySQL 中存储 emoji 得到不正确的字符串值错误
【发布时间】: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

标签: java mysql json


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    这对我有用!

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

    【讨论】:

      猜你喜欢
      • 2017-10-25
      • 1970-01-01
      • 2012-02-01
      • 2012-11-08
      • 2017-03-18
      • 1970-01-01
      • 1970-01-01
      • 2017-01-17
      • 2012-09-05
      相关资源
      最近更新 更多