5.0.27から5.1.41に変換して、キーエラーの重複を取得します(1062)
-
01-10-2019 - |
質問
現在5.0.27サーバーで実行されているデータベースがあります。新しい5.1.41サーバーに移動したいです。
私はすべてのファイルをmysqldump'sしました。復元時にエラーが発生します
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;
編集 - UNHEXに変更しました。
2つのサーバー間のすべてのcharsetと照合変数をチェックして再確認しましたが、それらは同じように見えます。彼らがそうでなかったとしても、私は自分で照合を指定しています。
ここで私が間違っていることについての手がかりはありますか?
編集:データベースをダンプするために使用しているコマンドは次のとおりです。
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
クライアント接続の照合を確認するにはどうすればよいですか?
解決 2
LiveJournalのバディから、5.0から5.1の間のバグ「Fix」であることがわかりました。彼らは照合を変えました。バグレポートを読むと、実際には 壊れた それ(ワイスとワイスは同等ではないはずです)。しかし、彼らはそれを破るつもりはありません。したがって、私は(Dave Orrが示唆するように)照合を変更するか、データを手動で編集する必要があります。
他のヒント
特定の問題は、UTF8_GENERAL_CIでは、「Weis」と「Weiß」が同等であることです。 「weiß」を「weiss」に等しくしたい場合は、utf8_unicode_ciを使用する必要があります。これにより、インポート側の問題が修正されます(データベースに「weiss」がある場合を除きますが、実際には重複しています)。
推測では、元のテーブルにはutf8_unicode_ciが設定されており、違いに気づきませんでした。それが真実でない場合、私はあなたのテーブルがどのように状態に入っているのか分かりません - しかし、正しい照合に切り替えるとあなたの問題が解決するはずです。
使用していますか mysqldump
& mysql
5.0の5.1から?
別のコンボを試すことができます。
SourcedBには、「一意の」列に重複値を含めることができますか?
「一意のキー」制約を削除し、TargetDBでどのレコードが複製されているかを確認します。
これにより、問題についての洞察が得られる可能性があります。
によって設定された文字を指定します --default-character-set
オプション。それは重要です。