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

Sol*_*ile 74 mysql

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

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

谢谢

She*_*eff 79

十进制是我会使用的

Decimal/Numeric和Float:Float之间的基本区别是近似数字数据类型,这意味着并非数据类型范围中的所有值都可以精确表示.十进制/数字是固定精度数据类型,这意味着数据类型reane中的所有值都可以精确和精确地表示.

从Decimal或Numeric转换为float会导致一些精度损失.对于十进制或数字数据类型,SQL Server将每个特定的精度和比例组合视为不同的数据类型.DECIMAL(4,2)和DECIMAL(6,4)是不同的数据类型.这意味着11.22和11.2222是不同的类型,但浮动不是这种情况.对于FLOAT(6),11.22和11.2222是相同的数据类型.


Ali*_*waz 27

字段类型"十进制"是好的.

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

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

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


Raz*_*zie 16

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

使用小数:

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

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


Pet*_*ter 6

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

  • 我继承了这样的系统,很有趣的是看到这个家伙在根据价格在DB中搜索之前如何乘以所有价格,反之亦然.后来由于这个原因,我已经有足够的痛苦来捕捉错误,然后再转到十进制 (4认同)