【问题标题】:how to store bitcoin and other currencies in mysql database [closed]如何在mysql数据库中存储比特币和其他货币[关闭]
【发布时间】:2017-12-19 14:32:49
【问题描述】:

我尝试制作支付系统。客户可以使用比特币或其他货币(如(美元,欧元)进行购买,我有一个带有(16,8)的小数列,对于比特币金额它可以正常工作,但是当我尝试将美元值放入例如 100 美元时,它变成100.00000000,我的问题是应该这样存储数量吗?比特币和其他货币使用相同的十进制列?计算所有记录时对性能不利吗?或者我应该有多列比特币十进制(16,8)和其他货币十进制(10,2),告诉我一个方法 - 请在回答时考虑数百万条记录。

【问题讨论】:

  • 这只是一个装饰性的...使用10,8,因为你需要它来处理比特币,但是​​在显示美元和欧元等时,请使用你的编程语言去除多余的零...

标签: mysql decimal currency bitcoin


【解决方案1】:

性能有两个方面——速度和空间。速度通常不是问题,因为获取行的成本远高于操作十进制/双精度等。如果您谈论的是十亿行,空间可能是一个问题(并导致速度变慢)。

经验法则:DECIMAL(m,n) 大约需要 m/2 字节。在(16,8) 的情况下,正好占用8 个字节。

DOUBLE 占用 8 个字节; BIGINT:8 个字节。等等。

不要将VARCHAR 用于数值,尤其是当您需要对它们进行排序时。

FLOATDOUBLE 会产生额外的舍入(十进制与二进制之间),从而可能导致舍入错误,尤其是在将大量数字相加时。

我不确定,8 位小数是比特币所需的官方最大值,对于任何其他货币来说都绰绰有余。 4 是我听说过的目前使用的货币最多的。 (不再使用英镑/先令/便士。)

DECIMAL(16,8) 以 100,000,000 美元/欧元/任何价格溢出。确保这就足够了。 DECIMAL(17,8) 也需要 8 个字节,最多为十亿。所以你最好用 17 而不是 16。

回到问题...没有“完美”的答案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-18
    • 2011-01-31
    相关资源
    最近更新 更多