在MySQL中存储货币值的最佳数据types
我想在MySQL数据库中存储很多logging。 所有这些都包含货币价值。 但是我不知道每个人会插入多less个数字。
我必须使用哪种数据types?
VARCHAR或INT (或其他数字数据types)?
由于货币需要一个确切的表示,所以不要使用像float
一样近似的数据types。 你可以使用一个定点的数字数据types
decimal(15,2)
-
15
是精度(包括小数位在内的值的总长度) -
2
是小数点后的位数
请参阅MySQL数字types :
使用这些types时,必须保持精确的精度,例如使用货币数据。
你可以使用DECIMAL
或NUMERIC
都是一样的
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