gpt4 book ai didi

mysql - MySQL中的DOUBLE vs DECIMAL

转载 作者:IT老高 更新时间:2023-10-28 12:54:10 26 4
gpt4 key购买 nike

好的,所以我知道有很多文章说我不应该使用 DOUBLE 在 MySQL 数据库上存储资金,否则我最终会遇到棘手的精度错误。关键是我不是在设计一个新的数据库,而是要求我找到优化现有系统的方法。较新的版本包含 783 个 DOUBLE 类型的列,其中大部分用于存储货币或用于计算货币金额的公式。

所以我对这个主题的第一个看法是,我强烈建议在下一个版本中将 DOUBLE 转换为 DECIMAL,因为 MySQL 文档和每个人都这么说。但后来我找不到任何好的论据来证明这一建议的合理性,原因有以下三个:

  • 我们不对数据库执行任何计算。所有操作都在 Java 中使用 BigDecimal 完成,而 MySQL 仅用作结果的普通存储。
  • DOUBLE 提供的 15 位精度就足够了,因为我们主要存储 2 位小数的金额,偶尔也会存储带有 8 位小数的公式参数。
  • 我们有 6 年的生产记录,没有由于 MySQL 方面的精度损失而导致的已知错误问题。

即使对 18 百万行的表执行操作,例如 SUM 和复数乘法,我也无法执行缺乏精度的错误。我们实际上并没有在生产中做这种事情。我可以通过执行类似

的操作来显示丢失的精度

SELECT columnName * 1.000000000000000 FROM tableName;

但我想不出办法将它变成小数点后第二位的错误。我在 Internet 上发现的大多数实际问题都是 2005 年和更早的论坛条目,我无法在 5.0.51 MySQL 服务器上重现它们。

因此,只要我们不执行任何我们不打算执行的 SQL 算术运算,我们是否应该预期在 DOUBLE 列中仅存储和检索金额会出现任何问题?

最佳答案

其实完全不一样。 DOUBLE 会导致舍入问题。如果您执行 0.1 + 0.2 之类的操作,它会为您提供 0.30000000000000004 之类的东西。我个人不会相信使用 float 学的财务数据。影响可能很小,但谁知道呢。我宁愿拥有我所知道的可靠数据,而不是近似数据,尤其是在处理货币值(value)时。

关于mysql - MySQL中的DOUBLE vs DECIMAL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6831217/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com