我想在MySQL数据库中存储许多记录。它们都包含货币值。但是我不知道每个值会插入多少位数。
为此,我应该使用哪种数据类型?
VARCHAR还是INT(或其他数字数据类型)?
我想在MySQL数据库中存储许多记录。它们都包含货币值。但是我不知道每个值会插入多少位数。
为此,我应该使用哪种数据类型?
VARCHAR还是INT(或其他数字数据类型)?
BIGINT
乘以100的形式,以节省存储空间,在所有“正常”情况下都没有意义。
DECIMAL(13,4)
中就足够了。DECIMAL
的9个数字。
DECIMAL(13,4)
表示9位数字+4位小数位(小数点后)=> 4 + 2字节=6字节BIGINT
所需的8字节相比较。使用 DECIMAL
(或者在 MySQL 中使用 NUMERIC
,它们是相同的)。
不要使用 DOUBLE
或者 FLOAT
(特别是 FLOAT
)。它们是带有二进制精度的浮点数。(在 Oracle 中,NUMBER
类型也是浮点数,但是具有十进制精度,这对于货币操作来说是可以接受的。)
使用 DECIMAL
时,需要指定总精度和小数部分。例如:
DECIMAL(10,2)
可以存储介于 -99,999,999.99
和 99,999,999.99
之间的值。DECIMAL(19,4)
可以存储介于 -999,999,999,999,999.9999
和 999,999,999,999,999.9999
之间的值。选择一个足够大的范围以适应您的情况,但要注意,范围越大,使用的存储空间就越多。在MySQL中,DECIMAL(10,2)
始终使用5个字节,DECIMAL(19,4)
始终使用9个字节,无论您存储的实际值如何。有关计算DECIMAL
存储大小的更多信息,请参见this。
将10000相乘并存储为BIGINT,类似于Visual Basic和Office中的“货币”。请参阅https://msdn.microsoft.com/en-us/library/office/gg264338.aspx。