MySQL:(产品)价格的首选列类型?

时间:2009-11-25 11:24:59

标签: mysql

在MySQL中,存储产品价格(或一般货币)的首选列类型是什么? Google了解到我经常使用FLOAT的DECIMAL,但我不知道哪一个更好。

我存储的价格从0.01到25.00不等。当然,更高的价值也是可能的。 (注意:我不是要求复制面食代码,我只是给你更多的信息,可以帮助你形成一个更完整的答案)。

由于

5 个答案:

答案 0 :(得分:70)

十进制是我要使用的那个

  

之间的基本区别   十进制/数字和浮点数:浮点数   近似数字数据类型   意味着并非数据中的所有值   类型范围可以准确表示。   十进制/数字是固定精度的   数据类型,表示全部   数据类型reane中的值可以是   精确地表示和   规模。

     

从十进制或数字转换为   浮动会造成一些损失   精确。对于十进制或数字   数据类型,SQL Server考虑每个   具体的精度和组合   缩放为不同的数据类型。   DECIMAL(4,2)和DECIMAL(6,4)是   不同的数据类型。这意味着   11.22和11.2222是不同的类型,但浮动不是这种情况。   对于FLOAT(6)11.22和11.2222是   相同的数据类型。

答案 1 :(得分:26)

字段类型“十进制”很好。

如果您的价格较高,那么您可以使用product_price decimal(6,2) NOT NULL,,即您可以在2位数之前存储小数点最多6位数的价格。

字段product_price decimal(6,2) NOT NULL,的最大值将存储价格高达9999.99

如果所有价格都在0.01到25.00之间,那么product_price decimal(4,2) NOT NULL,会很好,但如果您的价格会更高,那么您可以在decimal(4,2)中设置任何值。

答案 2 :(得分:15)

我不会使用float,因为它可以给出舍入错误,因为它是浮点类型。

使用小数:

  

“DECIMAL和NUMERIC类型是   用于存储它的值   保持确切的重要   精确度,例如货币   数据“。

请参阅:http://dev.mysql.com/doc/mysql/en/numeric-types.html

答案 3 :(得分:6)

我更喜欢INT(价格乘以100),它解决了其他软件中的浮点问题。

答案 4 :(得分:-3)

十进制是错误的,因为如果您想将价格设置为十进制12.99,请将其设置为13.00。这是错误的,但是如果您使用float,则可以将其另存为12.99。因此正确的答案是float和varchar。