Was ist der beste SQL-Datentyp für Währungswerte? Ich verwende MySQL, würde aber einen datenbankunabhängigen Typ bevorzugen.
mysql
sql
sqldatatypes
Brian Fisher
quelle
quelle
Antworten:
So etwas
Decimal(19,4)
funktioniert normalerweise in den meisten Fällen ziemlich gut. Sie können den Maßstab und die Präzision an die Anforderungen der zu speichernden Zahlen anpassen. Selbst in SQL Server verwende ich normalerweise nicht "money
", da dies nicht dem Standard entspricht.quelle
(19,4)
anstelle von(19,2)
?Das einzige, worauf Sie achten müssen, ist, dass DECIMAL (19,4) und DECIMAL (19,4) unterschiedliche Bedeutungen haben, wenn Sie von einer Datenbank in eine andere migrieren
( http://dev.mysql.com/doc/refman/5.1/en/precision-math-decimal-changes.html )
quelle
Es ist auch wichtig herauszufinden, wie viele Dezimalstellen möglicherweise für Ihre Berechnungen erforderlich sind.
Ich habe an einem Aktienkursantrag gearbeitet, bei dem der Preis von einer Million Aktien berechnet werden musste. Der notierte Aktienkurs musste mit einer Genauigkeit von 7 Stellen gespeichert werden.
quelle
Assafs Antwort von
klingt flippig, ist aber eigentlich relevant.
Erst heute hatten wir ein Problem, bei dem ein Datensatz nicht in unsere Rate-Tabelle eingefügt werden konnte, weil eine der Spalten (Bruttorate) auf Dezimal (11,4) gesetzt ist und unsere Produktabteilung gerade einen Vertrag für Zimmer in einem erstaunlichen Resort erhalten hat in Bora Bora, die für mehrere Millionen pazifische Franken pro Nacht verkauft werden ... etwas, das bei der Entwicklung des Datenbankschemas vor 10 Jahren nie erwartet wurde.
quelle
Bei Buchhaltungsanwendungen werden die Werte häufig als Ganzzahlen gespeichert (einige sagen sogar, dass dies der einzige Weg ist). Um sich ein Bild zu machen, nehmen Sie den Betrag der Transaktionen (nehmen wir 100,23 USD an) und multiplizieren Sie ihn mit 100, 1000, 10000 usw., um die erforderliche Genauigkeit zu erhalten. Wenn Sie also nur Cent speichern müssen und sicher auf- oder abrunden können, multiplizieren Sie einfach mit 100. In meinem Beispiel würde dies 10023 als zu speichernde Ganzzahl ergeben. Sie sparen Platz in der Datenbank und das Vergleichen von zwei Ganzzahlen ist viel einfacher als das Vergleichen von zwei Floats. Meine $ 0,02.
quelle
DECIMAL
? Sie müssen sehr vorsichtig sein, wenn Sie Pennys, Mühlen oder Millrays immer zu den richtigen Zeiten in Dollar umrechnen.Super später Einstieg, aber GAAP ist eine gute Faustregel.
Quelle: Bester Datentyp zum Speichern des Geldwerts in MySQL
quelle
Sie könnten so etwas wie
DECIMAL(19,2)
Standard für alle Ihre Geldwerte verwenden, aber wenn Sie immer nur Werte unter 1.000 US-Dollar speichern, wird dies nur eine Verschwendung von wertvollem Datenbankspeicher sein.Für die meisten Implementierungen
DECIMAL(N,2)
wäre dies ausreichend, wenn der Wert vonN
mindestens die Anzahl der Stellen vor.
der größten Summe ist, die Sie jemals in diesem Feld gespeichert haben+ 5
. Wenn Sie also nie erwarten, Werte über 999999,99 zu speichern,DECIMAL(11,2)
sollte dies mehr als ausreichend sein (bis sich die Erwartungen ändern).Wenn Sie GAAP- konform sein möchten, können Sie wählen
DECIMAL(N,4)
, wobei der Wert vonN
mindestens die Anzahl der Stellen vor.
der größten Summe ist, die Sie jemals in diesem Feld gespeichert haben+ 7
.quelle
Dies hängt von der Art der Daten ab. Sie müssen es vorher betrachten.
Mein Fall
Warum (M, 4)?
Abtausch
Kompatibles Extrem
Obwohl Sie in MySQL Dezimalstellen (65,30) verwenden können, scheinen 31 für die Skalierung und 30 für die Genauigkeit unsere Grenzen zu sein, wenn wir die Übertragungsoption offen lassen möchten.
Maximale Skalierung und Präzision in den meisten gängigen RDBMS:
6 , 7 , 8 , 9
Angemessenes Extrem
Wir neigen dazu zu sagen "Ja, sicher ... ich werde diese verrückten Figuren nicht brauchen". Nun, Simbabwer sagten das auch. Vor nicht allzu langer Zeit.
Stellen Sie sich vor, Sie müssen eine Transaktion von 1 Mio. USD in simbabwischen Dollar erfassen (heute vielleicht unwahrscheinlich, aber wer weiß, wie dies in 10 Jahren aussehen wird?).
quelle
Das mag zwar spät sein, aber es wird jemand anderem helfen. Aufgrund meiner Erfahrung und Forschung habe ich Dezimalstellen (19, 6) kennengelernt und akzeptiert. Das ist, wenn ich mit PHP und MySQL arbeite. bei der Arbeit mit viel Geld und Wechselkurs
quelle