拥有一个PHP脚本 - 使用所有正确的bcmath函数,并完全理解浮点数的问题。我也使用十进制列,因为,我的印象是,那些存储为不同的类型,并且数学更好。
所以我有一个问题: INSERT INTO mytable(标识符,金额)VALUES('identifer','some_number')ON DUPLICATE KEY UPDATE amount = amount + some_number;
基本上 - 如果我们没有行,请插入它,如果我们这样做,请添加some_number。
some_number列是十进制(24,8)
当some_number等于72100312.72872099并且当前行在0.00000000处清零时运行此时,数学结束时该列为72100312.72872100。
如果some_number是72100312.72872098,它可以正常工作。如果是72100312.72872101则罚款。如果我做11111111.72872099罚款。
如果当前行不为零,而是.00000005,那么72100312.72872099会增加罚款,总计为72100312.72872104。
这就像搞砸了一些数学。我认为十进制列对此免疫。
有没有办法解决这个问题,或者以更好的方式进行更新?我真的不必做一个选择,一个bcadd,然后一个更新。这种类型的行(在duoplicate update上插入)在代码中出现约120次。那就是选择/ bcadd / update的很多改装。
附录:只需在5.0转换为浮动数据之前读取MySQL服务器。我在5.5。它不是< 5.0问题。
Edit2:客户端版本是mysqlnd 5.0.11 - 不确定这是否可能是问题的一部分?服务器应该进行数学运算,对吗?