我有一个当前在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。
我检查并重新检查了两台服务器之间的所有字符集和校对变量,它们看起来完全相同。即使他们不是,我也会自己指定整理。
关于我在这里做错了什么的线索?
编辑:这是我用来转储数据库的命令:
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
如何检查客户端连接的排序规则?
答案 0 :(得分:1)
具体问题是在utf8_general_ci中,'weis'和'weiß'是等价的。如果你想'weiß'等于'weiss',那么你应该使用utf8_unicode_ci。这将解决导入方面的问题(除非你在数据库中有'weiss',但是你真的有重复)。
猜测,原始表设置了utf8_unicode_ci,您没有注意到差异。如果那不是真的,我不知道你的桌子是如何进入它所处的状态的 - 但是切换到正确的整理可以解决你的问题。
答案 1 :(得分:1)
来自LiveJournal的好友,我发现它是5.0和5.1之间的错误“修复”:他们改变了整理。如果您阅读错误报告,他们实际上打破它(weis和weiss不应该相同)。但他们不会破坏它。所以我要么必须改变整理(如Dave Orr建议的那样),要么手动编辑我的数据。
答案 2 :(得分:0)
您使用的是mysqldump
&amp; {3.1}来自5.0的mysql
?
你可以尝试不同的组合。
sourceDB是否可以在“unique”列中包含重复值?
删除“UNIQUE KEY”约束并检查targetDB中哪些记录重复
这可以提供一些问题的洞察力。
答案 3 :(得分:0)
通过--default-character-set
选项指定字符集。这很重要。