Ich kann MySQLs DECIMAL nicht ganz verstehen. Ich brauche die Zeile, um eine Nummer zwischen 00.0001 und 99.9999 enthalten zu können. Wie würde ich es so strukturieren, dass es so funktioniert?
Ich kann MySQLs DECIMAL nicht ganz verstehen. Ich brauche die Zeile, um eine Nummer zwischen 00.0001 und 99.9999 enthalten zu können. Wie würde ich es so strukturieren, dass es so funktioniert?
Antworten:
DOUBLE-Spalten sind nicht mit DECIMAL-Spalten identisch, und Sie werden in Schwierigkeiten geraten, wenn Sie DOUBLE-Spalten für Finanzdaten verwenden.
DOUBLE ist eigentlich nur eine Version von FLOAT mit doppelter Genauigkeit (64 Bit statt 32 Bit) . Gleitkommazahlen sind ungefähre Darstellungen von reellen Zahlen und nicht genau. Tatsächlich haben einfache Zahlen wie 0,01 keine exakte Darstellung in FLOAT- oder DOUBLE-Typen.
DECIMAL-Spalten sind exakte Darstellungen, nehmen jedoch viel mehr Platz für einen viel kleineren Bereich möglicher Zahlen ein. Um eine Spalte zu erstellen, die Werte von 0,0001 bis 99,9999 enthalten kann, wie Sie gefragt haben, benötigen Sie die folgende Anweisung
CREATE TABLE your_table
(
your_column DECIMAL(6,4) NOT NULL
);
Die Spaltendefinition folgt dem Format DECIMAL (M, D), wobei M die maximale Anzahl von Stellen (die Genauigkeit ) und D die Anzahl der Stellen rechts vom Dezimalpunkt (die Skala ) ist.
Dies bedeutet, dass der vorherige Befehl eine Spalte erstellt, die Werte von -99,9999 bis 99,9999 akzeptiert. Sie können auch eine UNSIGNED DECIMAL-Spalte im Bereich von 0,0000 bis 99,9999 erstellen.
Für weitere Informationen zu MySQL DECIMAL sind die offiziellen Dokumente immer eine großartige Ressource.
Beachten Sie, dass all diese Informationen für Versionen von MySQL 5.0.3 und höher gelten. Wenn Sie frühere Versionen verwenden, sollten Sie wirklich ein Upgrade durchführen.
DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL]
. Bei negativen Werten wird ein Fehler außerhalb des Bereichs zurückgegeben. Sie können auch unsigned FLOAT und DOUBLE erstellen. Handbuch: dev.mysql.com/doc/refman/5.0/en/numeric-type-overview.html
Obwohl die obigen Antworten richtig erscheinen, nur eine einfache Erklärung, um Ihnen eine Vorstellung davon zu geben, wie es funktioniert.
Angenommen, Ihre Spalte ist auf gesetzt DECIMAL(13,4)
. Dies bedeutet, dass die Spalte eine Gesamtgröße von 13 Stellen hat, von denen 4 für die präzise Darstellung verwendet werden.
Zusammenfassend hätten Sie für diese Spalte einen Maximalwert von: 999999999.9999
In den Kommentaren gibt es korrekte Lösungen, aber um sie in einer einzigen Antwort zusammenzufassen:
Sie müssen DECIMAL (6,4) verwenden.
Dann können Sie 6 Ziffern insgesamt haben, 2 vor und 4 nach dem Dezimalpunkt (der Skala). Zumindest nach dieser .
Die MySQL 5.x- Spezifikation für den dezimalen Datentyp lautet : DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL]
. Die obige Antwort ist falsch, wenn man sagt, dass vorzeichenlose Dezimalstellen nicht möglich sind.
Um ein Feld zu definieren, das nur vorzeichenlose Dezimalstellen mit einer Gesamtlänge von 6 Stellen zulässt, von denen 4 Dezimalstellen sind, verwenden Sie : DECIMAL (6,4) UNSIGNED
.
Sie können auch vorzeichenlose (dh nicht negative) FLOAT- und DOUBLE-Datentypen erstellen.