加密货币MySQL数据类型?

Kev*_*ton 12 mysql sql currency sqldatatypes

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

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

这现在重新提出经典论点.

IDEAS

选项1 BIGINT使用一个大的整数,以节省的实际价值,然后存储货币有多少位小数有(简单地将A通过10^B中译本)?

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

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


我想了解人们的想法以及他们在处理加密货币价值时所使用的内容.因为我难以接受最好的处理方法.

Bra*_*ger 11

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

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

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

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

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

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

  • 根据 Solidity 文档,声明为 uint256 的 ETH 值有 256 位无符号。这意味着 32 字节!因此,使用上述方法可能会出现一些令人惊讶的边缘情况,特别是在使用一些供应量明显较多的代币时。 (9认同)
  • @sasa不,对于“DECIMAL(27,18)”总共有27位:小数点前9位(4字节)和小数点后18位(8字节),总共12字节。 (2认同)