我尝试制作支付系统。客户可以使用比特币或其他货币进行购买,例如 (USD,EUR) 我有一个带 (16,8) 的十进制金额列,对于比特币金额,它正常工作,但是当我尝试将美元值设置为 100 美元时,它变成100.00000000,我的问题是应该像这样存储金额吗?对比特币和其他货币使用相同的十进制列?计算所有记录时对性能有害吗?或者我应该有多列比特币十进制(16,8)和其他货币十进制(10,2),请告诉我一种方法,请在回答时考虑数百万条记录。感谢您有一个愉快的一天
最佳答案
性能有两个方面——速度和空间。速度通常不是问题,因为获取行比操作十进制/ double /等的成本要高得多。如果您谈论的是 10 亿行,空间可能是一个问题(并导致速度变慢)。
经验法则:DECIMAL(m,n)
占用大约 m/2
字节。在 (16,8)
的情况下,它正好需要 8 个字节。DOUBLE
占用 8 个字节; BIGINT
: 8 字节。等等。
不要将 VARCHAR
用于数值,尤其是当您需要对它们进行排序时。FLOAT
和 DOUBLE
会产生额外的舍入(十进制到/从二进制),导致可能的舍入错误,尤其是在将大量数字相加时。
我不确定,8 位小数是比特币所需的官方最大值,对于任何其他货币来说都绰绰有余。对于当前使用的货币,4 是我听说最多的。 (不再使用英镑/先令/便士。)DECIMAL(16,8)
以 100,000,000 美元/欧元/任何方式溢出。确保这足够了。 DECIMAL(17,8)
也需要 8 个字节,最大为 10 亿。所以你也可以使用 17 而不是 16。
回到问题......没有“完美”的答案。
关于mysql - 如何在mysql数据库中存储比特币和其他货币,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47889200/