10 Stimmen

MYSQL: DEZIMAL mit einer Genauigkeit von 10 Ziffern nach dem Komma

In MySQL habe ich ein DECIMAL-Feld auf 10,10 eingestellt. Allerdings, wenn ich einen neuen Wert eingebe, wird 0.9999999999 angezeigt. Was müsste ich ändern, um eine beliebige Zahl mit einer Genauigkeit von 10 Stellen nach dem Komma zu akzeptieren? Es funktioniert aus irgendeinem Grund mit 10,6.

PS: Ich möchte Wechselkurse einfügen.

26voto

Xint0 Punkte 4881

Die erste Zahl ist die Gesamtzahl der zu speichernden Ziffern, die zweite ist die Anzahl der Ziffern im Dezimalteil. Also ist DECIMAL (10, 10) nur für 10 Dezimalziffern. Du kannst etwas wie DECIMAL (20, 10) verwenden, um jeweils 10 Ziffern im ganzzahligen und im Dezimalteil zuzulassen.

12voto

Marc B Punkte 347897

DECIMAL(10,10) bedeutet, dass keine Dezimalstellen mehr für Werte vor dem Dezimalpunkt verbleiben. Sie beschränken die Dinge darauf, immer x < 1 zu sein.

Es heißt DECIMAL(Gesamtzahl der Ziffern, Ziffern nach dem Dezimalpunkt). Mit 10,10 sagen Sie "10 Ziffern nach dem Dezimalpunkt", sodass 10-10 = 0 vor dem Dezimalpunkt bleiben. Das bedeutet, Sie können keine 1 speichern, und 0,9999999999 ist der nächste Wert, der in Ihre Felddefinition passt.

6voto

Bill Karwin Punkte 493880

Die Antwort von @Xint0 ist korrekt. Sie haben die Genauigkeit und den Skalenwert auf die gleiche Anzahl von Stellen gesetzt, sodass Sie nur Werte kleiner als 1,0 einfügen können.

Das andere, was passiert, ist das Standardverhalten von MySQL, Werte abzuschneiden, wenn sie nicht in den Datentyp für die Spalte passen.

mysql> CREATE TABLE foo (dec DECIMAL(10,10));
mysql> INSERT INTO foo VALUES (1.0);
Query OK, 1 row affected, 1 warning (0.00 sec)

Beachten Sie, dass dies eine Warnung generiert.

mysql> SHOW WARNINGS;
+---------+------+----------------------------------------------+
| Level   | Code | Message                                      |
+---------+------+----------------------------------------------+
| Warning | 1264 | Wert außerhalb des zulässigen Bereichs für die Spalte 'dec' in Zeile 1 |
+---------+------+----------------------------------------------+

mysql> SELECT * FROM foo;
+--------------+
| dec          |
+--------------+
| 0.9999999999 |
+--------------+

Sie können die Warnung in einen Fehler umwandeln, indem Sie den strengen SQL-Modus aktivieren:

mysql> SET SQL_MODE = STRICT_ALL_TABLES;
mysql> INSERT INTO foo VALUES (1.0);
ERROR 1264 (22003): Wert außerhalb des zulässigen Bereichs für die Spalte 'dec' in Zeile 1

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X