尝试将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 但找不到任何东西。
我在做什么错? 任何帮助将不胜感激。
答案 0 :(得分:3)
(感谢您将问题简化为一个非常简单的测试用例。)
utf8mb4_unicode_ci进行大小写折叠和重音剥离。因此,ş
= s
。
utf8mb4_bin会将它们视为不同的。但是,即使A
和a
也会有所不同。
utf8mb4_turkish_ci或utf8mb4_romanian_ci?他们将ş
视为一个单独的字母,介于sz
和ta
之间。更多详细信息:http://mysql.rjweb.org/utf8mb4_collations.html
也将turkish_ci(而不是romanian_ci)视为ü
作为单独的字母。