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


当前回答

我更喜欢使用BIGINT,并通过与100相乘来存储值,这样它将成为整数。

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

警告: 大多数情况下,我们不执行货币*货币乘法,以防万一,如果我们正在执行,然后将结果除以100并存储,以便返回适当的精度。

其他回答

如果您的应用程序需要处理高达万亿的货币值,那么这应该工作:13,2 如果你需要遵守GAAP(公认会计原则),那么使用:13,4

通常你应该把你的货币值加到13,4,然后把输出四舍五入到13,2。

实际上,这取决于程序员的偏好。我个人使用:数字(15,4)来符合公认会计原则(GAAP)。

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

将钱存储为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个字节相比。

因为货币需要精确的表示,所以不要使用像float这样的近似数据类型。您可以使用定点数值数据类型

decimal(15,2)

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

参见MySQL数值类型:

当需要保持精确的精确度时,例如货币数据,就会使用这些类型。