我有一个应用程序将用户输入保存到我的数据库中的表。数据库最初被设置为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会涵盖这个
答案 0 :(得分:0)
解决: 我使用以下命令集(已修改以满足我的需要)来更新默认排序规则:来源: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;
这只是我对数据库打开的连接。客户端代码实际上在初始字符集更新后工作。