我尝试建立付款系统.客户可以用比特币或其他货币进行购买,例如(USD,EUR)我有一个小数位数列为(16,8),对于比特币金额,它可以正常工作,但是当我尝试将美元价值(例如100美元)放入时,它变成100.00000000,我的问题是应该存储这样的金额吗?对比特币和其他货币使用相同的小数列?计算所有记录时对性能不利吗?或者我应该为比特币十进制(16,8)和其他货币十进制(10,2)设置多列,请给我一种方法,请在回答时考虑数百万条记录.感谢您有一个愉快的一天
解决方法:
性能有两个方面-速度和空间.速度通常不是问题,因为获取行比操作十进制/双精度等的代价高得多.如果您要谈论十亿行,空间可能是一个令人担忧的问题(并导致速度下降).
经验法则: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个字节,最大为十亿.因此,您最好使用17而不是16.
回到问题…没有“完美”的答案.