在MySQL中,存储产品价格(或一般货币)的首选列类型是什么? Google了解到我经常使用FLOAT的DECIMAL,但我不知道哪一个更好。
我存储的价格从0.01到25.00不等。当然,更高的价值也是可能的。 (注意:我不是要求复制面食代码,我只是给你更多的信息,可以帮助你形成一个更完整的答案)。
由于
答案 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类型是 用于存储它的值 保持确切的重要 精确度,例如货币 数据“。
答案 3 :(得分:6)
我更喜欢INT(价格乘以100),它解决了其他软件中的浮点问题。
答案 4 :(得分:-3)
十进制是错误的,因为如果您想将价格设置为十进制12.99,请将其设置为13.00。这是错误的,但是如果您使用float,则可以将其另存为12.99。因此正确的答案是float和varchar。