【发布时间】:2019-11-03 06:10:42
【问题描述】:
尝试将 utf-8 数据插入 MySql 上的主键时出现重复输入错误
表定义:
CREATE TABLE `test` (
`UserName` VARCHAR(256) NOT NULL,
PRIMARY KEY (`UserName`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;
插入:
insert test(`UserName`) VALUES('büsra'), ('büşra');
结果:
Error Code: 1062. Duplicate entry 'büşra' for key 'PRIMARY'
我认为 SQL Server 配置正确:
SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';
character_set_client utf8
character_set_connection utf8
character_set_database utf8mb4
character_set_filesystem binary
character_set_results utf8
character_set_server utf8mb4
character_set_system utf8
collation_connection utf8_general_ci
collation_database utf8mb4_unicode_ci
collation_server utf8mb4_unicode_ci
我已尝试在以下位置找到解决方案:mySQL: utf8 charset on index table and duplicate key error 但找不到。
我做错了什么? 任何帮助将不胜感激。
【问题讨论】:
-
您选择的 collation 认为这些字符在比较中是相等的……
-
@deceze 我应该使用哪种排序规则?有没有一种简单的方法来测试数据整理?
-
“您选择的排序规则认为这些字符在比较中是相等的” @deceze 不是 t100% 主题,但 8.0 版下的 MySQL 也有点奇怪,其中包含 NULL 字节检测重复项时的一些排序规则考虑this .. 这个接缝将在 MySQL 8 中修复,因为您会收到预期的 Duplicate entry 错误。
-
哪里有NUL字节?这不应该在 UTF-8 中发生。