Преобразование из 5.0.27 в 5.1.41, получение дубликатов ключевых ошибок (1062) - PullRequest
1 голос
/ 07 сентября 2010

У меня есть база данных, которая в настоящее время работает на сервере 5.0.27.Я хочу перейти на новый сервер 5.1.41.

Я mysqldump'd все файлы.При восстановлении я получаю ошибку

ERROR 1062 (23000) at line 21: Duplicate entry 'weiÃ' for key 'title'

Я сузил ошибку до этого скрипта, который я могу запустить, и он не работает:

--
-- Table structure for table `word`
--

set names utf8;

DROP TABLE IF EXISTS `word`;
CREATE TABLE `word`
(
  `wordid` int (10) unsigned NOT NULL auto_increment,
  `title` char (50) NOT NULL default '',
  PRIMARY KEY  (`wordid`),
  UNIQUE KEY `title` (`title`)
) ENGINE=MyISAM AUTO_INCREMENT=280707 DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;

--
-- Dumping data for table `word`
--

LOCK TABLES `word` WRITE;
INSERT INTO `word` VALUES
(198036,'weis'),
(241473, unhex('776569C39F'));
UNLOCK TABLES;

EDIT - изменен на UNHEX.

Я проверил и перепроверил все переменные charset и collation между двумя серверами, и они выглядят одинаково.Даже если это не так, я сам определяю параметры сортировки.

Есть какие-нибудь подсказки относительно того, что я здесь делаю неправильно?

РЕДАКТИРОВАТЬ: вот команда, которую я использую для дампабаза данных:

mysqldump --add-drop-table --add-locks --disable-keys --lock-tables --quick  -uusername -ppassword database > filename

и для загрузки

mysql -D$MYSQL_DB -u$MYSQL_USER -p$MYSQL_PASSWD < filename

Как проверить параметры сортировки для клиентских подключений?

Ответы [ 4 ]

1 голос
/ 07 сентября 2010

Конкретная проблема заключается в том, что в utf8_general_ci 'weis' и 'weiß' эквивалентны.Если вы хотите, чтобы 'weiß' было равно 'weiss', вам следует использовать utf8_unicode_ci.Это решит проблему на стороне импорта (если у вас нет «weiss» в базе данных, но тогда у вас действительно есть дубликат).

По предположению, исходная таблица имеет набор utf8_unicode_ci, и вы не сделалине замечаю разницу.Если это не так, я понятия не имею, как ваш стол перешел в состояние, в котором он находится, но переключение на правильное сопоставление должно решить вашу проблему.

1 голос
/ 07 сентября 2010

От друга из LiveJournal я узнал, что это «исправление» ошибки между 5.0 и 5.1: они изменили параметры сортировки. Если вы прочитаете отчет об ошибке, они на самом деле сломали это (weis и weiss не должны быть эквивалентны). Но они не собираются разрушать это. Поэтому мне придется либо изменить параметры сортировки (как предлагает Дейв Орр), либо вручную отредактировать мои данные.

http://bugs.mysql.com/bug.php?id=27877

0 голосов
/ 24 ноября 2010

Укажите набор символов с помощью опции --default-character-set.Это важно.

0 голосов
/ 07 сентября 2010

Используете ли вы mysqldump & mysql с 5.1 из 5.0?
Вы можете попробовать разные комбо.

Может ли sourceDB содержать повторяющиеся значения в столбце "unique"?
Удалите ограничение «УНИКАЛЬНЫЙ КЛЮЧ» и проверьте, какие записи дублируются в targetDB.
Это может дать некоторое представление о проблеме.

...