MariaDB无法插入特定Unicode字符U+242EE的问题求助
问题描述
使用MariaDB 10.6.16及10.3.39版本,执行以下SQL插入字符𤋮(U+242EE,2001年定义的Unicode字符)时触发错误:
CREATE TABLE problem ( text TEXT ) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; INSERT INTO problem (text) VALUES ('𤋮');
错误信息:
ERROR 1366 (22007) at line 5: Incorrect string value: '\xF0\xA4\x8B\xAE' for column `problem`.`text` at row 1
已尝试以下操作未解决:
- 确认字符并非过新编码
- 在两个MariaDB版本中测试
- 移除表定义的字符集与排序规则
- 其他4字节字符可正常插入
解决方法
1. 强制连接字符集为utf8mb4
客户端连接数据库时,必须确保连接字符集为utf8mb4,避免字符传输过程中被错误转码:
- 连接后立即执行:
SET NAMES utf8mb4; - 或在客户端连接参数中指定(如命令行工具添加
--default-character-set=utf8mb4)
2. 更换支持更广Unicode范围的排序规则
utf8mb4_unicode_ci基于Unicode 4.0标准,对CJK扩展B区的字符(如U+242EE)支持有限。可改用更新的排序规则:
- 创建表时指定
utf8mb4_unicode_520_ci(基于Unicode 5.2,覆盖更多扩展字符):
CREATE TABLE problem ( text TEXT ) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci;
- 若使用MariaDB 10.3及以上版本,也可选择
utf8mb4_0900_ai_ci(基于Unicode 9.0)
3. 检查服务器全局字符集配置
确认服务器级默认字符集和排序规则为utf8mb4系列:
SHOW VARIABLES LIKE 'character_set_server'; SHOW VARIABLES LIKE 'collation_server';
若配置不符,修改my.cnf/my.ini后重启服务:
[mysqld] character_set_server = utf8mb4 collation_server = utf8mb4_unicode_520_ci
内容的提问来源于stack exchange,提问作者Boldewyn
相关产品推荐
相关产品推荐

