У меня есть таблица с именем tag с уникальным ограничением на столбец имен:
CREATE TABLE `tag` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `UNIQ_389B7835E237E06` (`name`) ) ENGINE=InnoDB AUTO_INCREMENT=13963 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
Сопоставление для этой таблицы – utf8_unicode_ci. Когда я пытаюсь вставить следующие 2 записи, я получаю «нарушение ограничения целостности».
SQL-журнал:
130607 14:35:53 1096 Connect imtpdb@localhost on imtpdb 1096 Query SET NAMES utf8 1096 Query START TRANSACTION 1096 Query INSERT INTO tag (name) VALUES ('até') 1096 Query INSERT INTO tag (name) VALUES ('ate') 1096 Query rollback 1096 Quit
Точное сообщение об ошибке:
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'ate' for key 'UNIQ_389B7835E237E06'
my.cnf:
[client] default-character-set=utf8 [mysql] default-character-set=utf8 [mysqld] default-character-set = utf8 collation-server = utf8_unicode_ci init-connect='SET NAMES utf8' character-set-server = utf8
по[client] default-character-set=utf8 [mysql] default-character-set=utf8 [mysqld] default-character-set = utf8 collation-server = utf8_unicode_ci init-connect='SET NAMES utf8' character-set-server = utf8
по[client] default-character-set=utf8 [mysql] default-character-set=utf8 [mysqld] default-character-set = utf8 collation-server = utf8_unicode_ci init-connect='SET NAMES utf8' character-set-server = utf8
Я запускаю mysql 5.1.54. Я пытался понять это сейчас, но безрезультатно. Кто-нибудь знает, что я делаю неправильно? Ох, просто чтобы сказать очевидное. Запись уже не существует в таблице.
Collation utf8_unicode_ci
не чувствителен к регистру и не чувствителен к акценту, поэтому он рассматривает 'até'
и 'ate'
как дубликаты. Нет многоязычной сортировки unicode, которая не чувствительна к регистру и чувствительна к акценту. В зависимости от ваших потребностей вы можете попробовать различные обходные пути. Некоторые связанные вопросы: