我正在使用mysqldump将一些phpBB论坛从一台服务器备份复制到另一台服务器,使用一些基本选项:
mysqldump -h[server] --create-options --add-drop-database -R -E -B [database]
在做的时候出现了这样的错误:
ERROR 1062 (23000) at line 9322: Duplicate entry '?????' for key 'wrd_txt'
在phpBB论坛中,这是一个表上的UNIQUE键,其中发布的每个单词都被注册和计数。问题似乎是this one:
当mysqldump转储DOUBLE值时,它使用的精度不足 区分一些接近的价值(并且,可能是不充分的 精度从原始数据库重新创建确切的值)。如果 DOUBLE值是主键或唯一索引的一部分,还原 此输出中的数据库因重复键错误而失败。
这是由于我们论坛上有一些关于cirilic字母的帖子造成的; mysqldump似乎将cirilic字符作为一个简单的值并截断它们,所以每个字符在使用cirilic字母表时都是相同的(在这种情况下字符表示为?)。这导致在UNIQUE键列中遇到相同大小的字符串的重复值。
有没有办法使用其他选项或其他工具使用双精度执行转储?或者在转储上避免这个问题的方法
仅仅是为了记录,因为桌子上的那些单词只是因为垃圾邮件,而我们只对拉丁字符感兴趣,我使用这个命令骑了它们(也许它对任何人都有用)。
delete from [table] where NOT HEX([column]) REGEXP '^([0-C][0-9A-F])*$';
提前多多感谢!