Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wenn ich xx zur MySQL-Float-Spalte hinzufüge, ist das ein falsches Ergebnis. Ist es ein Fehler?

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.