代码之家  ›  专栏  ›  技术社区  ›  Kevin Upton

加密货币MySQL数据类型?

  •  27
  • Kevin Upton  · 技术社区  · 7 年前

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

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

    思想

    BIGINT 使用一个大整数保存实际值,然后存储货币的小数位数(只需除以 A 通过 10^B 在翻译中)?

    选项2 Decimal(60,30) 将数据类型存储在一个大的十进制中,这将不可避免地占用大量空间。

    选项3 VARCHAR(64)


    我想知道人们的想法,以及他们在处理加密货币价值时使用了什么。因为我被最好的方法难住了。

    1 回复  |  直到 4 年前
        1
  •  30
  •   Bradley Grainger    7 年前

    在你建议的三个选项中,有一个明显的最佳选项(加上评论中的一个)。

    BIGINT公司 仅使用8个字节,但最大 BIGINT 只有19位小数;如果你除以10 18 ,您可以表示的最大值是9.22,这是不够的范围。

    双重 精度只有1517位小数;具有浮点算法的所有已知缺点。

    瓦查尔 如果处理18位小数,将使用20多个字节;将需要常量stringint转换;无法排序;无法比较;数据库中不能添加;许多缺点。

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

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