Ihr Problem hat etwas damit zu tun, wie groß Ihr Gleitkommawert ist, aber ich bin mir nicht 100% sicher, warum. Ich habe das Aktualisieren einer ähnlichen Zeile mit kleineren Zahlen getestet und es hat gut funktioniert. Sie sollten auch möglichst auf die Verwendung von Anführungszeichen verzichten, da dies eine zusätzliche Verarbeitung erfordert. Siehe diese SO-Frage:Aktualisiere eine Spalte durch Subtrahieren von a Wert
Hier ist meine einfache Problemumgehung, genau wie Tim Biegeleisen vorgeschlagen hat:
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;
Einfügen:
USE dbname;
insert into xxx Values(1234, 99959040.00, 0.00, 99999.00);
Update ohne Strings:
update xxx set money = money - 20 where uid = 1234;
Beim Rechnen mit großen Gleitkommawerten gibt es einige merkwürdige Dinge. Einige dieser Probleme sind maschinenabhängig und hängen mit Ihrem Prozessortyp zusammen. Lesen Sie hier mehr:http://dev.mysql .com/doc/refman/5.7/en/problems-with-float.html
Laut einer anderen SO-Frage sind Gleitkommawerte KEINE gute Möglichkeit, Geldwerte zu speichern. Unterschied zwischen float- und decimal-Datentyp (siehe die zweite Antwort).
Es scheint, dass die Verwendung von decimal
und numeric
Datentypen eignen sich am besten für Geldspalten in MySQL.