Mysql 将utf-8数据插入主键时重复输入
我在尝试将utf-8数据插入MySql上的主键时遇到重复输入错误 表定义:Mysql 将utf-8数据插入主键时重复输入,mysql,utf-8,Mysql,Utf 8,我在尝试将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'),
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
我试图在以下方面找到解决方案:
但是找不到
我做错了什么?
任何帮助都将不胜感激。(感谢您将问题简化为一个非常简单的测试用例。)
utf8mb4_unicode_ci进行大小写折叠和重音去除。因此,ş
=s
utf8mb4_bin会将它们视为不同的。但即使是A
和A
也会有所不同
utf8mb4_土耳其_ci或utf8mb4_罗马尼亚_ci可能是您想要的?他们将ş
视为一个单独的字母,介于sz
和ta
之间。更多详情:
此外,土耳其语(而非罗马尼亚语)将
u
视为一个单独的字母。您选择的排序规则在比较中认为这些字符相等…@deceze我应该使用哪种排序规则?有没有一种简单的方法来测试数据的排序?“您选择的排序规则将这些字符视为比较中的一个比较”@欺骗不是T100%的主题,但是版本8下的MySQL在检测重复时在一些排序中也有空字节。这将在MySQL 8中修复,因为您将获得预期的重复条目错误。NUL字节在哪里?“这不应该发生在UTF-8中。”埃雷斯·本·哈鲁什-如果你关注的是土耳其语,我补充了我的答案。