我想在MySQL数据库中存储许多记录。它们都包含货币价值。但我不知道每个数字要插入多少位。 为此,我必须使用哪种数据类型? VARCHAR或INT(或其他数值数据类型)?
当前回答
有2个有效选项:
使用整数数量的货币小单位(例如分) 将金额表示为货币的十进制值
在这两种情况下,您都应该使用十进制数据类型来拥有足够的有效数字。区别在于精度:
即使是整数数量的小单位,也最好有额外的累加精度(考虑从1美分操作累积10%的费用) 不同的货币有不同数量的小数,加密货币有多达18个小数 由于通货膨胀,小数的数量可以随着时间的推移而改变
来源和更多的警告和事实。
其他回答
乘以10000并存储为BIGINT,就像Visual Basic和Office中的“货币”一样。参见https://msdn.microsoft.com/en-us/library/office/gg264338.aspx
你可以使用DECIMAL或NUMERIC,两者都是一样的
DECIMAL和NUMERIC类型存储精确的数值数据值。当需要保持精确的精确度时,例如货币数据,就会使用这些类型。在MySQL中,NUMERIC被实现为DECIMAL,因此下面关于DECIMAL的说明同样适用于NUMERIC。: MySQL
例如十进制(10,2)
良好的阅读
将钱存储为BIGINT乘以100或更多,以使用更少的存储空间为理由,在所有“正常”情况下都没有意义。
为了与GAAP保持一致,以DECIMAL(13,4)存储货币就足够了。 MySQL手册读到每9位需要4个字节来存储DECIMAL。 https://dev.mysql.com/doc/refman/8.0/en/precision-math-decimal-characteristics.html DECIMAL(13,4)表示9位+ 4位小数(小数点后数位)=> 4 + 2字节= 6字节 与存储BIGINT所需的8个字节相比。
在提出这个问题的时候,没有人考虑比特币的价格。在BTC的情况下,使用DECIMAL(15,2)可能是不够的。如果比特币将上涨到10万美元或更多,我们将至少需要DECIMAL(18,9)来支持我们的应用程序中的加密货币。
DECIMAL(18,9)在MySQL中占用12个字节的空间(每9个数字占用4个字节)。
有2个有效选项:
使用整数数量的货币小单位(例如分) 将金额表示为货币的十进制值
在这两种情况下,您都应该使用十进制数据类型来拥有足够的有效数字。区别在于精度:
即使是整数数量的小单位,也最好有额外的累加精度(考虑从1美分操作累积10%的费用) 不同的货币有不同数量的小数,加密货币有多达18个小数 由于通货膨胀,小数的数量可以随着时间的推移而改变
来源和更多的警告和事实。
推荐文章
- 在MySQL中检测值是否为number
- MySQL中两个日期之间的差异
- 为什么在MySQL中文本列不能有一个默认值?
- 使用SQL查询查找最近的纬度/经度
- 如何停止mysqld
- 检查MySQL表是否存在而不使用“select from”语法?
- 从NOW() -1天选择记录
- 从表中选择1是什么意思?
- 数据库性能调优有哪些资源?
- 如何更改表的默认排序规则?
- MySQL foreign_key_checks是否影响整个数据库?
- 设置NOW()为datetime数据类型的默认值?
- 在MySQL中Datetime等于或大于今天
- 删除MySQL中的主键
- 我如何在MySQL中添加更多的成员到我的enum类型列?