你的问题与你的浮点值有多大有关,但我不能 100% 确定原因。我测试了用较小的数字更新类似的行,效果很好。您还应该尽可能避免使用引号,因为它需要额外的处理。看看这个问题:通过减去一个值来更新列 https://stackoverflow.com/questions/5383108/update-a-column-by-subtracting-a-value
这是我的简单解决方法,就像蒂姆·比格莱森建议的那样:
CREATE TABLE `xxx` (
`uid` int(11) NOT NULL,
`money` decimal(10,2) NOT NULL DEFAULT '0.00' ,
`real_money` float(10,2) NOT NULL ,
`available_invoice` float(10,2) DEFAULT NULL,
PRIMARY KEY (`uid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
Insert:
USE dbname;
insert into xxx Values(1234, 99959040.00, 0.00, 99999.00);
不带字符串更新:
update xxx set money = money - 20 where uid = 1234;
使用大浮点值进行计算时会出现一些奇怪的情况。其中一些问题与机器相关,并且与您拥有的处理器类型有关。在这里阅读更多内容:http://dev.mysql.com/doc/refman/5.7/en/problems-with-float.html http://dev.mysql.com/doc/refman/5.7/en/problems-with-float.html
另外,根据另一个问题,浮点值不是存储货币值的好方法。浮点型和小数型数据类型的区别 https://stackoverflow.com/questions/5150274/difference-between-float-and-decimal-data-type(见第二个答案)。
看来使用decimal
and numeric
数据类型最适合 mysql 中的资金列。