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

时间:2019-06-20 12:10:05

标签: 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'), ('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 但找不到任何东西。

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

1 个答案:

答案 0 :(得分:3)

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

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

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

您可能想要

utf8mb4_turkish_ci或utf8mb4_romanian_ci?他们将ş视为一个单独的字母,介于szta之间。更多详细信息:http://mysql.rjweb.org/utf8mb4_collations.html

也将turkish_ci(而不是romanian_ci)视为ü作为单独的字母。