在MySQL中存储货币值的最佳数据types

我想在MySQL数据库中存储很多logging。 所有这些都包含货币价值。 但是我不知道每个人会插入多less个数字。
我必须使用哪种数据types?
VARCHARINT (或其他数字数据types)?

由于货币需要一个确切的表示,所以不要使用像float一样近似的数据types。 你可以使用一个定点的数字数据types

 decimal(15,2) 
  • 15是精度(包括小数位在内的值的总长度)
  • 2是小数点后的位数

请参阅MySQL数字types :

使用这些types时,必须保持精确的精度,例如使用货币数据。

你可以使用DECIMALNUMERIC都是一样的

DECIMAL和NUMERICtypes存储精确的数字数据值。 使用这些types时,必须保持精确的精度,例如使用货币数据。 在MySQL中,NUMERIC是作为DECIMAL实现的,所以下面关于DECIMAL的说法同样适用于NUMERIC。 : MySQL

DECIMAL(10,2)

示例设置

好读

这取决于你的需要。

使用DECIMAL(10,2)通常就足够了,但是如果你需要更精确的值,你可以设置DECIMAL(10,4)

如果你用大的价值工作,用19代替10

我更喜欢使用BIGINT ,并将值存储在乘以100 ,以便它将成为整数。

例如,要表示93.49的货币值,该值应该被存储为9349 ,而显示值可以被100除以及显示。 这将占用较less的存储空间。

警告:
大多数情况下,我们不执行currency * currency乘法,如果我们这样做,然后将结果除以100并存储,以便它返回到适当的精度。

如果您的应用程序需要处理高达一万亿的货币价值,那么这应该起作用:13,2如果您需要遵守GAAP(通用会计准则),则使用:13,4

通常你应该把你的货币价值总和为13,4,然后把产出四舍五入到13,2。

事实上,这依赖于程序员的偏好。 我个人使用: numeric(15,4)符合公认会计原则( GAAP

尝试使用

 Decimal(19,4) 

这通常适用于其他所有数据库

乘以10000并存储为BIGINT,如Visual Basic和Office中的“货币”。 请参阅https://msdn.microsoft.com/en-us/library/office/gg264338.aspx