Es gibt eine klare beste Option aus den drei, die Sie vorgeschlagen haben (plus eine aus den Kommentaren).
GROSS — verwendet nur 8 Bytes, aber das größte BIGINT
hat nur 19 Dezimalstellen; Wenn Sie durch 10 teilen, ist der größte darstellbare Wert 9,22, was nicht genügend Bereich ist.
DOPPELT — hat nur eine Genauigkeit von 15–17 Dezimalstellen; hat alle bekannten Nachteile der Fließkommaarithmetik.
VARCHAR — verwendet mehr als 20 Bytes, wenn Sie es mit 18 Dezimalstellen zu tun haben; erfordert konstante String↔int-Konvertierungen; kann nicht sortiert werden; kann nicht verglichen werden; kann nicht in DB hinzugefügt werden; viele Nachteile.
DEZIMAL(27,18) – Wenn Sie MySQL verwenden, dauert dies 12 Bytes (4 für jede Gruppe von 9 Ziffern ). Dies ist eine ziemlich vernünftige Speichergröße und hat genug Reichweite, um Beträge von bis zu einer Milliarde oder so kleinen wie einem Wei zu unterstützen. Es kann in der Datenbank ohne Genauigkeitsverlust sortiert, verglichen, addiert, subtrahiert usw. werden.
Ich würde DECIMAL(27,18)
verwenden (oder DECIMAL(36,18)
wenn Sie wirklich große Werte speichern müssen), um Geldwerte in Kryptowährung zu speichern.