在MySQL中存储货币值的最佳数据类型是什么?

357

我想在MySQL数据库中存储许多记录。它们都包含货币值。但是我不知道每个值会插入多少位数。
为此,我应该使用哪种数据类型?
VARCHAR还是INT(或其他数字数据类型)?


21
“deimal(10,2)”是我使用的代码…您可以根据预期大小调整数值。 - Manse
9
相关问题是最佳货币数据类型 ;). - shA.t
14个回答

4
将货币存储为大于或等于100的BIGINT乘以100的形式,以节省存储空间,在所有“正常”情况下都没有意义。

1

使用 DECIMAL(或者在 MySQL 中使用 NUMERIC,它们是相同的)。

不要使用 DOUBLE 或者 FLOAT(特别是 FLOAT)。它们是带有二进制精度的浮点数。(在 Oracle 中,NUMBER 类型也是浮点数,但是具有十进制精度,这对于货币操作来说是可以接受的。)

使用 DECIMAL 时,需要指定总精度和小数部分。例如:

  • DECIMAL(10,2) 可以存储介于 -99,999,999.9999,999,999.99 之间的值。
  • DECIMAL(19,4) 可以存储介于 -999,999,999,999,999.9999999,999,999,999,999.9999 之间的值。

选择一个足够大的范围以适应您的情况,但要注意,范围越大,使用的存储空间就越多。在MySQL中,DECIMAL(10,2)始终使用5个字节,DECIMAL(19,4)始终使用9个字节,无论您存储的实际值如何。有关计算DECIMAL存储大小的更多信息,请参见this


1
有两个有效的选项:
  1. 使用货币较小单位的整数金额(例如,美分)
  2. 将金额表示为货币的小数值
在这两种情况下,您应该使用“decimal”数据类型以获得足够的有效数字。差异在于精度:
  • 即使是货币较小单位的整数金额,也最好为累加器提供额外的精度(考虑从1美分操作中累计10%费用)
  • 不同的货币具有不同数量的小数位,加密货币最多有18个小数位
  • 由于通货膨胀,小数位数可能会随时间而变化
来源及更多注意事项和事实: Source

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接