【问题标题】:Incorrect String value without "?characterEncoding=UTF-8"没有“?characterEncoding = UTF-8”的字符串值不正确
【发布时间】:2014-06-07 02:50:19
【问题描述】:

我正在尝试在我的数据库中的某个字段中插入一些文本,但我遇到了表情符号问题。发生的情况是,如果我没有将连接 url 设置为jdbc:mysql://localhost:3306/MyDatabase?characterEncoding=UTF-8,那么服务器将很好地存储表情符号,但也会将非拉丁字符存储为问号。

现在,如果我这样设置我的连接 url,那么服务器将不喜欢表情符号并输出错误:

Incorrect string value: '\xF0\x9F\x98\xB1\xF0\x9F...' for column 'fullTweet' at row 1

我已在本地服务器上完成了所有必要的 utf8 兼容性步骤:

  1. 我将character-set-server=utf8mb4 添加到my.ini
  2. 查询show variables like 'character_set_server' 返回utf8mb4
  3. 我使用查询CREATE DATABASE twitter DEFAULT CHARACTER SET utf8mb4 创建我的数据库
  4. 默认情况下,我的所有表格和表格字段都使用utf8mb4_general_ci(正如我在phpmyadmin 中看到的那样)

缺少什么?我确信我已经完成了所有必要的步骤,但我仍然无法让它工作,它要么只存储拉丁字符,要么不存储表情符号。


我上一个问题的补充信息:

我可以在数据库中手动输入表情符号,它们的显示方式与调试器中的显示方式完全相同(作为框)。我运行这个查询:

INSERT INTO `tweets`(`id`, `createdAt`, `screenName`, `fullTweet`, `editedTweet`) VALUES (450,"1994-12-19","john",_utf8mb4 x'F09F98B1',_utf8mb4 x'F09F98B1')

这就是表格中的行的样子:

【问题讨论】:

    标签: java mysql utf-8 character-encoding


    【解决方案1】:

    这在How to support full Unicode in MySQL databases · Mathias Bynens中有详细解释 基本上,我认为你想念这个(来自Step 5

    [client]
    default-character-set = utf8mb4
    
    [mysql]
    default-character-set = utf8mb4
    
    [mysqld]
    character-set-client-handshake = FALSE
    character-set-server = utf8mb4
    collation-server = utf8mb4_unicode_ci
    

    然后,您应该从您的 URL 中删除 characterEncoding=UTF-8。 还要检查您是否有 MySQL Connector/J 5.1.13+(请参阅 JDBC url for MySQL configuration to use utf8 character encoding

    【讨论】:

      【解决方案2】:

      试试这个-->

      convert('string' using utf8)
      

      convert('string',char)
      

      convert('string' using latin1)
      

      或使用您在表中设置的任何字符编码。 我提供的代码是mysql函数。

      【讨论】:

      • 我找不到任何此类功能,它们无法被识别。
      猜你喜欢
      • 2012-08-09
      • 1970-01-01
      • 2014-03-17
      • 2023-03-27
      • 2015-03-29
      • 2017-06-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多