我想在MySQL数据库中存储许多记录。它们都包含货币价值。但我不知道每个数字要插入多少位。 为此,我必须使用哪种数据类型? VARCHAR或INT(或其他数值数据类型)?
当前回答
你可以使用DECIMAL或NUMERIC,两者都是一样的
DECIMAL和NUMERIC类型存储精确的数值数据值。当需要保持精确的精确度时,例如货币数据,就会使用这些类型。在MySQL中,NUMERIC被实现为DECIMAL,因此下面关于DECIMAL的说明同样适用于NUMERIC。: MySQL
例如十进制(10,2)
良好的阅读
其他回答
如果您的应用程序需要处理高达万亿的货币值,那么这应该工作:13,2 如果你需要遵守GAAP(公认会计原则),那么使用:13,4
通常你应该把你的货币值加到13,4,然后把输出四舍五入到13,2。
有2个有效选项:
使用整数数量的货币小单位(例如分) 将金额表示为货币的十进制值
在这两种情况下,您都应该使用十进制数据类型来拥有足够的有效数字。区别在于精度:
即使是整数数量的小单位,也最好有额外的累加精度(考虑从1美分操作累积10%的费用) 不同的货币有不同数量的小数,加密货币有多达18个小数 由于通货膨胀,小数的数量可以随着时间的推移而改变
来源和更多的警告和事实。
因为货币需要精确的表示,所以不要使用像float这样的近似数据类型。您可以使用定点数值数据类型
decimal(15,2)
15是精度(包括小数点在内的值的总长度) 2是小数点后的位数
参见MySQL数值类型:
当需要保持精确的精确度时,例如货币数据,就会使用这些类型。
你可以使用DECIMAL或NUMERIC,两者都是一样的
DECIMAL和NUMERIC类型存储精确的数值数据值。当需要保持精确的精确度时,例如货币数据,就会使用这些类型。在MySQL中,NUMERIC被实现为DECIMAL,因此下面关于DECIMAL的说明同样适用于NUMERIC。: MySQL
例如十进制(10,2)
良好的阅读
我更喜欢使用BIGINT,并通过与100相乘来存储值,这样它将成为整数。
例如,要表示93.49的货币值,该值应存储为9349,而显示的值可以除以100并显示。这将占用更少的存储空间。
警告: 大多数情况下,我们不执行货币*货币乘法,以防万一,如果我们正在执行,然后将结果除以100并存储,以便返回适当的精度。