Проблемът ви има нещо общо с това колко голяма е стойността ви с плаваща запетая, но не съм 100% сигурен защо. Тествах актуализиране на подобен ред с по-малки числа и работи добре. Трябва също така да се въздържате от използване на кавички, когато е възможно, тъй като това изисква допълнителна обработка. Вижте този SO въпрос:актуализиране на колона чрез изваждане на стойност
Ето моето лесно решение, точно както Тим Бигелайзен предложи:
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;
Вмъкване:
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
Също така, според друг SO въпрос, стойностите с плаваща запетая НЕ са добър начин за съхраняване на парични стойности. Разлика между плаващ и десетичен тип данни (вижте втория отговор).
Изглежда, че използвайки decimal
и numeric
типовете данни са най-добри за колони за пари в mysql.