【问题标题】:MySQL import a dumped database results in different valuesMySQL 导入转储的数据库会导致不同的值
【发布时间】:2018-03-08 14:32:51
【问题描述】:

我有以下任务: - 将数据库(名为 live)转储为 DBBackup_TIMESTAMP.sql - 将创建的转储导入另一个数据库(名为 test) - 再次将数据库测试转储为 diff.sql

这就像魅力一样。最后一步是比较两个转储(DBBackup_TIMESTAMP.sql 和 diff.sql)以验证转储的 DBBackup_TIMESTAMP.sql 文件并将其保存在备份空间中。

问题: 这两个文件是不同的。 在实时数据库中,表中有一些行具有 -0.000 作为双精度值,而在测试数据库中,特定行的值为 0.000。

问题: 有没有办法强制 mysql 将值 -0.000 导入到测试数据库中? (是的,我知道 0.000 是正确的,而 -0.000 不是那么正确,但要求是在数据库中有 -0.000)

MySQL 版本:mysql Ver 14.14 Distrib 5.5.55,适用于使用 readline 6.2 的 debian-linux-gnu (i686)

转储命令:

mysqldump -u $MYSQL_USER --password=$MYSQL_PASS -h 127.0.0.1 --port=$PORT --skip-comments --databases my_db > $FILE_NAME

导入命令:

mysql -u $MYSQL_USER --password=$MYSQL_PASS -h 127.0.0.1 --port=$MYSQL_PORT_BACKUP < $DUMP_FILE

任何想法如何解决这个问题或可能是什么问题?

如果有人可以提供帮助,或者至少知道问题所在,那就太好了。

【问题讨论】:

    标签: mysql import export double


    【解决方案1】:

    您看到的是记录在案的行为。

    https://dev.mysql.com/doc/refman/5.7/en/problems-with-float.html 说:

    上述问题的一个含义是,如果您尝试通过在主服务器上使用 mysqldump 转储表内容并将转储文件重新加载到从服务器来创建复制从服务器,则两台主机之间包含浮点列的表可能会有所不同。

    如果您需要精确的数值,请使用DECIMAL

    进一步阅读:What Every Computer Scientist Should Know About Floating-Point Arithmetic(戈德堡,1991 年)

    【讨论】:

    • 谢谢比尔,这个信息就是解决方案!
    猜你喜欢
    • 1970-01-01
    • 2011-07-22
    • 2011-11-26
    • 2013-01-23
    • 2018-07-29
    • 1970-01-01
    • 2016-08-21
    • 2015-05-01
    相关资源
    最近更新 更多