如何在 mysql 数据库中存储比特币和其他货币
how to store bitcoin and other currencies in mysql database
我尝试制作支付系统。客户可以使用比特币或其他货币进行购买,例如(美元,欧元)我有一个带有(16,8)的十进制金额列,对于比特币金额它正常工作,但是当我尝试输入美元价值例如 100 美元时,它变成100.00000000,我的问题是应该像这样存储数量吗?对比特币和其他货币使用相同的十进制列?计算所有记录时对性能不利吗?或者我应该为比特币 decimal(16,8) 和其他货币 decimal(10,2) 设置多个列,告诉我一个方法 - 请在回答时考虑数百万条记录。
性能有两个方面 -- 速度和 space。速度通常不是问题,因为获取行的成本远高于操作 decimal/double/etc 的成本。如果您谈论的是十亿行,Space 可能是一个问题(并导致速度减慢)。
经验法则:DECIMAL(m,n)
大约需要 m/2
个字节。在(16,8)
的情况下,正好需要8个字节。
DOUBLE
占用8个字节; BIGINT
:8个字节。等等
不要对数值使用 VARCHAR
,尤其是当您需要对它们进行排序时。
FLOAT
和 DOUBLE
会产生额外的舍入(十进制 to/from 二进制),导致可能出现舍入错误,尤其是在将大量数字相加时。
我不确定,小数点后 8 位是比特币官方规定的最大值,对于任何其他货币来说都绰绰有余。 4 是我听说过的目前使用最多的一种货币。 (Pounds/Shillings/Pence 不再使用。)
DECIMAL(16,8)
在 100,000,000 dollars/euros/whatever 处溢出。确保足够了。 DECIMAL(17,8)
也占用 8 个字节,最多为十亿。所以你不妨用17而不是16.
回到问题...没有'perfect'答案。
我尝试制作支付系统。客户可以使用比特币或其他货币进行购买,例如(美元,欧元)我有一个带有(16,8)的十进制金额列,对于比特币金额它正常工作,但是当我尝试输入美元价值例如 100 美元时,它变成100.00000000,我的问题是应该像这样存储数量吗?对比特币和其他货币使用相同的十进制列?计算所有记录时对性能不利吗?或者我应该为比特币 decimal(16,8) 和其他货币 decimal(10,2) 设置多个列,告诉我一个方法 - 请在回答时考虑数百万条记录。
性能有两个方面 -- 速度和 space。速度通常不是问题,因为获取行的成本远高于操作 decimal/double/etc 的成本。如果您谈论的是十亿行,Space 可能是一个问题(并导致速度减慢)。
经验法则:DECIMAL(m,n)
大约需要 m/2
个字节。在(16,8)
的情况下,正好需要8个字节。
DOUBLE
占用8个字节; BIGINT
:8个字节。等等
不要对数值使用 VARCHAR
,尤其是当您需要对它们进行排序时。
FLOAT
和 DOUBLE
会产生额外的舍入(十进制 to/from 二进制),导致可能出现舍入错误,尤其是在将大量数字相加时。
我不确定,小数点后 8 位是比特币官方规定的最大值,对于任何其他货币来说都绰绰有余。 4 是我听说过的目前使用最多的一种货币。 (Pounds/Shillings/Pence 不再使用。)
DECIMAL(16,8)
在 100,000,000 dollars/euros/whatever 处溢出。确保足够了。 DECIMAL(17,8)
也占用 8 个字节,最多为十亿。所以你不妨用17而不是16.
回到问题...没有'perfect'答案。