我试着建立支付系统。客户可以用比特币或其他费用购买,比如(美元,欧元)我有一个十进制金额列(16,8),对于比特币的数量它正常工作,但是当我试图把美元的价值--例如100美元--变成100.00000000,我的问题是应该存储这样的金额吗?对比特币和其他货币使用相同的十进制行吗?当计算所有记录时,这对性能有影响吗?或者我应该有多列比特币小数点(16,8)和其他货币小数点(10,2),给我一个方法-请考虑数以百万计的记录,当你回答。
发布于 2018-01-21 15:03:42
性能有两个方面--速度和空间。速度通常不是一个问题,因为获取行比操纵十进制/双/等的代价要高得多。如果您谈论的是10亿行,空间可能是一个问题(并导致减速)。
经验法则:DECIMAL(m,n)使用m/2字节。在(16,8)的情况下,它只需要8个字节。
DOUBLE需要8个字节;BIGINT:8个字节。等。
不要对数值使用VARCHAR,特别是当您需要对它们进行排序时。
FLOAT和DOUBLE会产生额外的舍入(十进制到二进制),导致可能的舍入错误,特别是当加了大量数字时。
我不确定,8位小数点是比特币的官方最高要求,对任何其他货币来说都是足够的。对于目前使用的货币来说,4是我听说的最多的一种货币。(英镑/先令/便士不再使用。)
DECIMAL(16,8)溢额为1亿美元/欧元/其他。确保这就足够了。DECIMAL(17,8)也需要8个字节,最多可达10亿字节。所以你最好用17而不是16。
回到问题上..。没有“完美”的答案。
https://stackoverflow.com/questions/47889200
复制相似问题