ERROR 1062 (23000) at line 8615879: Duplicate entry 'Voß' for key 'ticketwords'
Пробую найти значение в уже добавленных строках, которое конфликтует со значением 'Voß'
mysql> select * from swticketwords where contents = 'Voß'; +--------------+----------+ | ticketwordid | contents | +--------------+----------+ | 20080 | Vos | +--------------+----------+ 1 row in set (0.00 sec)
Ерунда какая-то. Получается, что база считает 'Vos' = 'Voß' и отказывается добавлять значение. Начинаю гуглить и сразу натыкаюсь на репорты в багтрекере MySQL [1] [2]. Если в кратце, то разрабы поломали collation utf8_general_ci (который работал в mysql 5.0.x) и отказываются его чинить в mysql 5.1.x, мотивируя это тем, что фикс сломает еще больше.
Чтобы хоть как-то решить проблему был создан отдельный collation utf8_general_mysql500_ci, который возвращает старое поведение. Я поправил дамп, указав явный collation для таблицы swticketwords, и база успешно импортировалась. Чтобы показать разницу между utf8_general_ci и utf8_general_mysql500_ci я сделал запросы со старым и новым collation.
mysql> select * from swticketwords where contents = 'Voß' collate utf8_general_ci; +--------------+----------+ | ticketwordid | contents | +--------------+----------+ | 20080 | Vos | | 126378 | Voß | +--------------+----------+ 2 rows in set (0.00 sec)
На поле contents создан уникальный ключ ticketwords, и двух значений быть не должно.
mysql> select * from swticketwords where contents = 'Voß' collate utf8_general_mysql500_ci; +--------------+----------+ | ticketwordid | contents | +--------------+----------+ | 126378 | Voß | +--------------+----------+ 1 row in set (0.00 sec)
Ссылки:
1) http://bugs.mysql.com/bug.php?id=27877
2) http://bugs.mysql.com/bug.php?id=43593
3) http://dev.mysql.com/doc/refman/5.1/en/charset-unicode-sets.html
Комментариев нет:
Отправить комментарий