好吧,所以我知道有很多文章都说我不应该使用DOUBLE在MySQL数据库上存储钱,否则我最终会遇到棘手的精确错误.重点是我不是在设计一个新的数据库,我是在寻找优化现有系统的方法.新版本包含783个双类型列,其中大多数用于存储货币或计算货币金额的公式.
因此,我对这个问题的第一个看法是,我应该强烈建议在下一个版本中将DOUBLE转换为DECIMAL,因为MySQL文档和所有人都这么说.但我找不到任何好的理由来证明这一建议的合理性,原因有三:
- 我们不会对数据库进行任何计算.所有操作都是在Java中使用BigDecimal完成的,MySQL只是用作结果的普通存储.
- 双精度a提供的15位精度已经足够了,因为我们存储的金额主要是2位小数,偶尔也有小数字是8位小数作为公式参数.
- 我们有6年的生产记录,由于MySQL方面的精度损失,没有已知的错误问题.
即使在一个1800万行的表上执行一些操作,比如求和和和复数乘法,我也不能执行一个缺乏精确性的错误.实际上,我们在生产中并没有这样做.我可以通过这样做来显示精度损失
SELECT columnName * 1.000000000000000 FROM tableName;
但我想不出一个办法,把它变成小数点后第二位的错误.我在互联网上发现的大多数真实问题都是2005年及更老的论坛条目,我无法在5.0.51 MySQL服务器上复制它们.
所以,只要我们不执行任何SQL算术运算(我们不打算这么做),那么我们只在一个双栏中存储和检索一个金额,有什么问题吗?