Hay una clara mejor opción de las tres que sugirió (más una de los comentarios).
GRANDE — usa solo 8 bytes, pero el mayor BIGINT
solo tiene 19 dígitos decimales; si divide por 10, el valor más grande que puede representar es 9,22, que no es un rango suficiente.
DOBLE — solo tiene de 15 a 17 dígitos decimales de precisión; tiene todos los inconvenientes conocidos de la aritmética de punto flotante.
VARCHAR — utilizará más de 20 bytes si se trata de 18 decimales; requerirá conversiones string↔int constantes; no se puede ordenar; no se puede comparar; no se puede agregar en DB; muchas desventajas.
Usaría DECIMAL(27,18)
(o DECIMAL(36,18)
si necesita almacenar valores realmente enormes) para almacenar valores de dinero en criptomonedas.