Mysql 将utf-8数据插入主键时重复输入

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'),

我在尝试将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
我试图在以下方面找到解决方案: 但是找不到

我做错了什么? 任何帮助都将不胜感激。

(感谢您将问题简化为一个非常简单的测试用例。)

utf8mb4_unicode_ci进行大小写折叠和重音去除。因此,
ş
=
s

utf8mb4_bin会将它们视为不同的。但即使是
A
A
也会有所不同

utf8mb4_土耳其_ci或utf8mb4_罗马尼亚_ci可能是您想要的?他们将
ş
视为一个单独的字母,介于
sz
ta
之间。更多详情:


此外,土耳其语(而非罗马尼亚语)将
u
视为一个单独的字母。

您选择的排序规则在比较中认为这些字符相等…@deceze我应该使用哪种排序规则?有没有一种简单的方法来测试数据的排序?“您选择的排序规则将这些字符视为比较中的一个比较”@欺骗不是T100%的主题,但是版本8下的MySQL在检测重复时在一些排序中也有空字节。这将在MySQL 8中修复,因为您将获得预期的重复条目错误。NUL字节在哪里?“这不应该发生在UTF-8中。”埃雷斯·本·哈鲁什-如果你关注的是土耳其语,我补充了我的答案。