1

現在、5.0.27 サーバーで実行されているデータベースがあります。新しい 5.1.41 サーバーに移行したいと考えています。

すべてのファイルを mysqldump しました。復元時にエラーが発生する

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 つのサーバー間のすべての文字セット変数と照合変数を確認して再確認しましたが、それらは同一に見えます。そうでなかったとしても、自分で照合を指定しています。

ここで私が間違っていることについての手がかりはありますか?

編集:データベースをダンプするために使用しているコマンドは次のとおりです。

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

4 に答える 4

1

LiveJournalの仲間から、5.0と5.1の間のバグ「修正」であることがわかりました。彼らは照合を変更しました。バグレポートを読んだ場合、彼らは実際にそれを壊しました(weisとweissは同等ではないはずです)。しかし、彼らはそれを壊すつもりはありません。したがって、照合を変更するか(Dave Orrが提案するように)、データを手動で編集する必要があります。

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

于 2010-09-07T18:33:33.630 に答える
1

具体的な問題は、utf8_general_ci では、'weis' と 'weiß' が同等であるということです。「weiß」を「weiss」と等しくしたい場合は、utf8_unicode_ci を使用する必要があります。これにより、インポート側の問題が修正されます (データベースに「weiss」がある場合を除きますが、実際には重複があります)。

推測では、元のテーブルには utf8_unicode_ci が設定されており、違いに気付かなかったでしょう。そうでない場合、テーブルがどのようにして現在の状態になったのかわかりませんが、正しい照合順序に切り替えることで問題が解決するはずです。

于 2010-09-07T17:41:47.273 に答える
0

オプションで文字セットを指定し--default-character-setます。それは重要です。

于 2010-11-24T08:45:34.880 に答える
0

5.0 の 5.1 からmysqldump&を使用していますか? さまざまなコンボを試すことができます。mysql

sourceDB の「一意の」列に重複する値が含まれている可能性はありますか?
「UNIQUE KEY」制約を削除し、どのレコードが targetDB で重複しているかを確認します。
これにより、問題に対する洞察が得られる可能性があります。

于 2010-09-07T17:36:45.927 に答える