Il existe clairement une meilleure option parmi les trois que vous avez suggérées (plus une parmi les commentaires).
BIGINT — utilise seulement 8 octets, mais le plus grand BIGINT
n'a que 19 chiffres décimaux ; si vous divisez par 10, la plus grande valeur que vous pouvez représenter est 9,22, ce qui n'est pas suffisant.
DOUBLE — n'a que 15 à 17 chiffres décimaux de précision; présente tous les inconvénients connus de l'arithmétique à virgule flottante.
VARCHAR - utilisera plus de 20 octets si vous avez affaire à 18 décimales ; nécessitera des conversions chaîne↔int constantes ; ne peut pas être trié ; ne peut pas être comparé; ne peut pas être ajouté dans la base de données ; beaucoup d'inconvénients.
DÉCIMAL(27,18) – si vous utilisez MySQL, cela prendra 12 octets (4 pour chaque groupe de 9 chiffres ). Il s'agit d'une taille de stockage tout à fait raisonnable et d'une plage suffisante pour prendre en charge des quantités aussi importantes qu'un milliard ou aussi petites qu'un Wei. Il peut être trié, comparé, additionné, soustrait, etc. dans la base de données sans perte de précision.
J'utiliserais DECIMAL(27,18)
(ou DECIMAL(36,18)
si vous avez besoin de stocker des valeurs vraiment énormes) pour stocker des valeurs monétaires de crypto-monnaie.