Der beste Datentyp zum Speichern von Geldwerten in MySQL
Ich soll zum speichern von vielen Datensätzen in einer MySQL-Datenbank. Alle von Ihnen enthält Geld Werte. Aber ich weiß nicht, wie viele Ziffern eingefügt werden.
Welchen Datentyp muss ich verwenden für diesen Zweck?
VARCHAR oder INT (oder andere numerische Datentypen)?
Kommentar zu dem Problem - Öffnen
deimal(10,2)
ist, was ich benutze ... Sie können die Werte je nach Größe erwartet Stellt sich die Frage, Beste Datentyp für die Währung ;).
InformationsquelleAutor der Frage Mohammad Saberi | 2012-10-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
Da Geld braucht, eine genaue Darstellung nicht verwenden, Datentypen, sind nur annähernd MAßGEBEND, wie
float
. Sie können die Verwendung eines fixed-point-numerischen Datentyp für die, die wie15
ist die Präzision (Gesamt Länge des Werts, einschließlich Dezimalstellen)2
ist die Anzahl der Ziffern nach DezimalpunktSehen MySQL Numerische Datentypen:
InformationsquelleAutor der Antwort juergen d
Können Sie
DECIMAL
oderNUMERIC
beides das gleiched.h.
DECIMAL(10,2)
Good read
InformationsquelleAutor der Antwort NullPoiиteя
Kommt es auf Ihren Bedarf.
Mit
DECIMAL(10,2)
in der Regel ist genug, aber wenn Sie benötigen ein wenig mehr genaue Werte können Sie einstellenDECIMAL(10,4)
.Wenn Sie die Arbeit mit großen Werten zu ersetzen
10
mit19
.InformationsquelleAutor der Antwort Svetoslav
Bevorzuge ich
BIGINT
, und speichern Sie die Werte durch multiplizieren mit 100, so, dass er zu integer.Z.B., zu vertreten, den Wert einer Währung von
93.49
, der Wert wird gespeichert, wie9349
, während der Anzeige der Wert, den wir können Division durch 100 und display. Dies belegen weniger Speicherplatz.InformationsquelleAutor der Antwort Dinesh P.R.
Wenn Ihre Anwendung benötigt, um den Umgang mit Geld Werte bis zu eine Billion, dann sollte dies funktionieren: 13,2
Wenn Sie brauchen, um die Einhaltung GAAP (Generally Accepted Accounting Principles), dann verwenden: 13,4
In der Regel sollten Sie die Summe Ihres Geld-Werte bei 13,4 bevor Rundung der Ausgabe auf 13,2.
InformationsquelleAutor der Antwort david.ee
In der Tat diese stützt sich auf das programmer ' s Vorlieben. Ich persönlich benutze:
numeric(15,4)
zu entsprechen, die Generally Accepted Accounting Principles (GAAP).InformationsquelleAutor der Antwort Chagbert
Versuchen Sie es mit
dies funktioniert in der Regel mit jeder anderen DB auch
InformationsquelleAutor der Antwort Deepesh
An der Zeit diese Frage gefragt wurde, dachte niemand über die Bitcoin-Preis. Im Falle von BTC, ist es wahrscheinlich nicht ausreichend zu nutzen
DECIMAL(15,2)
. Wenn der Bitcoin steigt auf $100.000 oder mehr, benötigen wir mindestensDECIMAL(18,9)
zu unterstützen cryptocurrencies in unseren apps.DECIMAL(18,9)
dauert 12 Byte Speicherplatz in MySQL (4 bytes pro 9-stellig).InformationsquelleAutor der Antwort bizwiz
10000 multipliziert und speichert als BIGINT, wie "Währung" in Visual Basic und Office. Sehen https://msdn.microsoft.com/en-us/library/office/gg264338.aspx
InformationsquelleAutor der Antwort auntyellow
Wir verwenden
double
.*gasp*
Warum?
Weil es für jede beliebige 15-stellige Nummer ohne Zwänge, wo der Dezimalpunkt wird. Alle für einen mickrigen 8 bytes!
So kann es darstellen:
0.123456789012345
123456789012345.0
...und alles dazwischen.
Dies ist nützlich, weil wir den Umgang mit Globale Währungen, und
double
speichern kann, die verschiedene Anzahlen von Dezimalstellen, werden wir wahrscheinlich begegnen.Einem einzigen
double
Feld darstellen kann 999,999,999,999,999 s im japanischen yens, 9,999,999,999,999.99 s in US-Dollar und sogar 9,999,999.99999999 s in bitcoinsWenn Sie versuchen, das gleiche zu tun mit
decimal
müssen Siedecimal(30, 15)
welche Kosten 14 bytes.Vorsichtsmaßnahmen
Natürlich mit
double
ist nicht ohne Vorbehalte.Jedoch es ist nicht Verlust der Genauigkeit, wie manche neigen dazu, Punkt, aus. Obwohl
double
sich vielleicht nicht intern genau auf die base-10-system, können wir es genau durch Rundung der Wert wir ziehen aus der Datenbank zu seiner signifikanten Dezimalstellen. Wenn nötig, ist. (z.B., Wenn es ausgegeben wird, und die Basis 10 Vertretung erforderlich ist.)Die Vorbehalte sind, jedes mal, wenn wir arithmetische Operationen ausgeführt werden, müssen wir das Ergebnis normalisieren (durch Runden auf seiner signifikanten Dezimalstellen) vor:
Andere Art von Nachteil ist, im Gegensatz zu
decimal(m, d)
wo die Datenbank verhindern, dass Programme einfügen einer Zahl mit mehr alsm
Ziffern, keine solche Validierungen existiert mitdouble
. Ein Programm einfügen könnte ein Benutzer eingegebenen Wert von 20 stellen und es am Ende wird leise aufgenommen, da eine ungenaue Menge.InformationsquelleAutor der Antwort antak