Er is een duidelijk beste optie van de drie die je hebt voorgesteld (plus één uit de opmerkingen).
BIGINT — gebruikt slechts 8 bytes, maar de grootste BIGINT
heeft slechts 19 decimale cijfers; als je deelt door 10, is de grootste waarde die je kunt vertegenwoordigen 9,22, wat niet genoeg is.
DUBBEL — heeft slechts 15–17 decimale cijfers met een nauwkeurigheid; heeft alle bekende nadelen van rekenen met drijvende komma.
VARCHAR — zal 20+ bytes gebruiken als je te maken hebt met 18 decimalen; vereist constante string-int-conversies; kan niet worden gesorteerd; kan niet worden vergeleken; kan niet worden toegevoegd in DB; veel nadelen.
DECIMAAL(27,18) – bij gebruik van MySQL duurt dit 12 bytes (4 voor elke groep van 9 cijfers ). Dit is een redelijk redelijke opslagomvang en heeft voldoende bereik om bedragen zo groot als een miljard of zo klein als één Wei te ondersteunen. Het kan worden gesorteerd, vergeleken, opgeteld, afgetrokken, enz. in de database zonder verlies van precisie.
Ik zou DECIMAL(27,18)
. gebruiken (of DECIMAL(36,18)
als u echt enorme waarden moet opslaan) om cryptocurrency-geldwaarden op te slaan.