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

87
在MySQL中,存储产品价格(或通用货币)的首选列类型是什么?谷歌让我知道 DECIMAL 或 FLOAT 经常被使用,但我想知道哪个更好。
我要存储从0.01到25.00的价格,当然也可能存在更高的值。(注:我不是要求复制粘贴的代码,只是提供更多信息以帮助您形成更完整的答案)。
谢谢。
3个回答

97

我会使用Decimal数据类型

Decimal/Numeric和Float之间的基本区别:Float是近似数字数据类型,这意味着在数据类型范围内并不能准确表示所有值。Decimal/Numeric是定点精确数据类型,这意味着数据类型范围内的所有值都可以精确表示,并带有精度和比例。

从Decimal或Numeric转换为float可能会导致一些精度损失。对于Decimal或Numeric数据类型,SQL Server将每个精度和比例的特定组合视为不同的数据类型。DECIMAL(4,2)和DECIMAL(6,4)是不同的数据类型。这意味着11.22和11.2222是不同类型,尽管对于float来说情况并非如此。对于FLOAT(6),11.22和11.2222是相同的数据类型。


感谢 jdt199 和 Razzie,会接受你们两个的答案,但因为你的回答最完整,所以选择了你的。 - SolidSmile
1
@Sheff DECIMAL(2,2) 应该改为 DECIMAL(4,2)。 DECIMAL(2,4) 应该改为 DECIMAL(6,4)。 请参考 https://dev.mysql.com/doc/refman/5.7/en/precision-math-decimal-characteristics.html。 - cgaldiolo
PrestaShop使用Decimal(20,2)。所以,十进制它就是了!。 - DevWL

32

“Decimal”字段类型不错。

如果你有更高的价格,那么可以使用product_price decimal(6,2) NOT NULL,即可存储带有小数点的六位价格数字中的前两位。

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

如果所有价格在0.01到25.00之间,则product_price decimal(4,2) NOT NULL,将是不错的选择,但如果你的价格更高,则可以在decimal(4,2)中设置任何值。


16

我不会使用浮点数,因为它是一种浮点类型,可能会导致舍入误差。

请使用 decimal:

"DECIMAL 和 NUMERIC 类型用于存储需要保留精确精度的值,例如货币数据。"

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


另外,请参见:https://dev.mysql.com/doc/refman/5.7/en/fixed-point-types.html - Amr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接