Как решить «ERROR 1062 (23000) at line X: Duplicate entry ?????? for key X»

Импортировал недавно дамп в MySQL и обнаружил следующую ошибку:

ERROR 1062 (23000) at line 14096: Duplicate entry '????????' for key 'name'

Судя по знакам вопроса в ошибке, проблема была скорее в кодировке, посмотрел кодировку дампа через Notepad++, она была — UTF8.

Подключился к mysql, посмотрел кодировку базы:

mysql -u root
SELECT default_character_set_name FROM information_schema.SCHEMATA WHERE schema_name = "database_name";

Кодировка базы была latin1, кстати у меня она установилась по умолчанию при создании базы.

Поэтому я удалил базу и создал указав кодировку:

DROP DATABASE database_name;
CREATE DATABASE database_name CHARACTER SET utf8 COLLATE utf8_general_ci;
exit

После этого выполнил импорт:

mysql database_name < database_name.sql;

Импорт прошел успешно, ошибок не отображалось.

В случае если кодировка базы и дампа совпадает, а вы действительно хотите записать повторяющиеся данные, то можно в дампе, в запросах с этими данными заменить INSERT INTO на INSERT IGNORE INTO, где находятся эти повторяющиеся данные можно понять по номеру строки в ошибке, например у меня «at line 14096».

Если необходимо импортировать дамп поверх существующей базы, то можно изменить INSERT INTO на REPLACE INTO.

Например из командной строки можно заменить все так:

replace 'INSERT INTO' 'REPLACE INTO' -- database_name.sql

Перед любыми действиями нужно создать резервную копию базы, а также знать зачем и что вы делаете.

Смотрите также мою статьи:
Импорт и экспорт MySQL баз данных
Популярные статьи о MySQL

Подписаться на IT Blog (RU) по Email
Subscribe to IT Blog (EN) by Email

Did my article help you? How about buying me a cup of coffee as an encouragement? Buy me a coffe.

Добавить комментарий