Дублирующая запись при вставке данных utf-8 в первичный ключ - PullRequest
0 голосов
/ 20 июня 2019

Я получаю Дублирующую ошибку ввода при попытке вставить данные 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 таблицы индекса иошибка дубликата ключа , но не удалось найти.

Что я делаю не так?Любая помощь будет оценена.

1 Ответ

3 голосов
/ 20 июня 2019

(Спасибо за то, что свели проблему к очень простому тестовому кейсу.)

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, рассматривает ü как отдельную букву.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...