質問

現在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が示唆するように)照合を変更するか、データを手動で編集する必要があります。

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

他のヒント

特定の問題は、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 オプション。それは重要です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top