【问题标题】:Incorrect string value for Cangjie character using MySQL utf8 collation (4 byte support)使用 MySQL utf8 排序规则的仓颉字符的字符串值不正确(支持 4 字节)
【发布时间】:2018-06-07 09:59:50
【问题描述】:

我有一个应用程序将用户输入保存到我的数据库中的表中。该数据库最初设置为 utf8(MySQL v5.7),但从阅读中建议 MySQL 仅支持 3 字节及其 utf8 排序规则,并且需要升级到 utf8mb4 才能支持 4 字节。

我目前正在通过将文本保存在仓颉中进行一些测试,并且在大多数情况下看起来不错,但是当尝试保存以下字符“????”时,我收到以下错误:

'Incorrect string value: \'\\xF0\\xA4\\x8D\\xA2\\xE5\\x8F...\' for column \'content\' at row 1'

我在数据库、表和列级别升级到 utf8mb4 但仍然看到错误。

我也尝试在数据库级别手动插入内容(而不是通过应用程序)并得到相同的错误,所以我知道这不是实现问题。

谁能说明为什么会出现这种情况?我以为 utf8mb4 会涵盖这个

【问题讨论】:

    标签: mysql utf-8


    【解决方案1】:

    已解决: 我使用了以下一组命令(根据我的需要进行了修改)来更新默认排序规则:来源:https://mathiasbynens.be/notes/mysql-utf8mb4

    # For each database:
    ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = 
    utf8mb4_unicode_ci;
    # For each table:
    ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE 
    utf8mb4_unicode_ci;
    # For each column:
    ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) 
    CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
    # (Don’t blindly copy-paste this! The exact statement depends on the 
    column type, maximum length, and other properties. The above line is 
    just an example for a `VARCHAR` column.)
    

    仅此一项不起作用,我还必须这样做以更新一些全局变量,例如 character_set_client、character_set_connection 等:

    set names utf8mb4 collate utf8mb4_unicode_ci;
    

    这只是为了我打开到数据库的连接。客户端代码在初始字符集更新后实际工作。

    【讨论】:

    • 5.7 不需要 191 kludge。
    猜你喜欢
    • 1970-01-01
    • 2013-06-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-20
    • 1970-01-01
    • 2012-12-02
    • 2014-03-17
    • 1970-01-01
    相关资源
    最近更新 更多