我正在使用 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 论坛中,这是一个表上的唯一键,其中发布的每个单词都被注册和计数。问题似乎是这个:
当 mysqldump 转储一个 DOUBLE 值时,它使用的精度不足以区分一些接近的值(并且可能是精度不足,无法从原始数据库重新创建确切的值)。如果 DOUBLE 值是主键或唯一索引的一部分,则从此输出还原数据库失败并出现重复键错误。
这是由于我们论坛上一些关于西里尔字母的帖子引起的;mysqldump 似乎将cirilic 字符作为一个简单的值并截断它们,因此每个字符在使用cirilic 字母表时似乎都是相同的(在这种情况下,字符表示为?)。这导致在唯一键列中遇到相同大小的字符串的重复值。
有没有办法使用其他选项或通过其他工具使用双精度执行转储?或者一种在转储时避免这个问题的方法?
只是为了记录,因为桌子上的那些 cirilic 词只是由于垃圾邮件而存在,而且我们只对拉丁字符感兴趣,所以我使用这个命令来驾驭它们(也许它对任何人都有用)。
delete from [table] where NOT HEX([column]) REGEXP '^([0-C][0-9A-F])*$';
提前非常感谢!