Има ясно най-добрия вариант от трите, които предложихте (плюс един от коментарите).
ГОЛЯМ — използва само 8 байта, но най-големият BIGINT
има само 19 десетични цифри; ако разделите на 10, най-голямата стойност, която можете да представите, е 9,22, което не е достатъчен диапазон.
ДВОЙНО — има само 15–17 десетични цифри с точност; има всички известни недостатъци на аритметиката с плаваща запетая.
VARCHAR — ще използва 20+ байта, ако имате работа с 18 знака след десетичната запетая; ще изисква постоянни преобразувания на string↔int; не може да се сортира; не може да се сравнява; не може да се добави в БД; много недостатъци.
DECIMAL(27,18) – ако използвате MySQL, това ще отнеме 12 байта (4 за всяка група от 9 цифри ). Това е доста разумен размер за съхранение и има достатъчен обхват, за да поддържа количества от един милиард или до един Wei. Може да се сортира, сравнява, добавя, изважда и т.н. в базата данни без загуба на прецизност.
Бих използвал DECIMAL(27,18)
(или DECIMAL(36,18)
). ако трябва да съхранявате наистина огромни стойности), за да съхранявате парични стойности на криптовалута.