加密货币MySQL数据类型?

时间:2017-10-10 04:55:08

标签: mysql sql currency sqldatatypes

在SQL数据库中存储货币值时有关数据类型的臭名昭着的问题。

然而,在这些艰难时期,我们现在拥有价值高达18位小数的货币(谢谢ETH)。

现在重新提出经典论点。

IDEAS

选项1 BIGINT使用大整数来保存实际值,然后存储货币所包含的小数位数(只需将A除以10^B在翻译)?

选项2 Decimal(60,30)将数据类型存储为大小数,这不可避免地会占用大量空间。

选项3 VARCHAR(64)存储在字符串中。哪会对性能产生影响。

我想了解人们的想法以及他们在处理加密货币价值时所使用的内容。因为我被最好的方法所困扰。

1 个答案:

答案 0 :(得分:9)

你建议的三个中有一个明确的最佳选择(加上评论中的一个)。

BIGINT - 仅使用8个字节,但最大BIGINT只有19个十进制数字;如果除以10 18 ,则可以表示的最大值为9.22,这是不够的范围。

DOUBLE - 只有15-17个十进制数字的精度;具有浮点运算的所有已知缺点。

VARCHAR - 如果您处理18位小数,则将使用20+个字节;将需要不断的string↔int转换;无法分类;无法比较;无法在DB中添加;许多缺点。

DECIMAL(27,18) - 如果使用MySQL,则需要12个字节(4 for each group of 9 digits)。这是一个非常合理的存储大小,并且有足够的范围来支持大到10亿或小到一个Wei的数量。它可以在数据库中进行排序,比较,添加,减去等,而不会损失精度。

如果你需要存储真正巨大的价值,我会使用DECIMAL(27,18)(或DECIMAL(36,18)来存储加密货币的价值。