在MySQL中,用于存储产品价格(或一般货币)的首选列类型是什么?Google得知我经常使用DECIMAL FLOAT,但我想知道哪种更好。
我存储的价格范围是0.01到25.00。当然,更高的值也是可能的。(注意:我不是在要求复制粘贴代码,我只是向您提供更多信息,可以帮助您形成更完整的答案)。
谢谢
在MySQL中,用于存储产品价格(或一般货币)的首选列类型是什么?Google得知我经常使用DECIMAL FLOAT,但我想知道哪种更好。
我存储的价格范围是0.01到25.00。当然,更高的值也是可能的。(注意:我不是在要求复制粘贴代码,我只是向您提供更多信息,可以帮助您形成更完整的答案)。
谢谢
Answers:
小数是我要使用的那个
十进制/数字和浮点数之间的基本区别:浮点数是近似数字数据类型,这意味着并非可以准确表示数据类型范围内的所有值。小数/数字是固定精度数据类型,这意味着数据类型reane中的所有值都可以精确地表示为小数位数。
从十进制或数字转换为浮点数可能会导致精度损失。对于十进制或数字数据类型,SQL Server将精度和小数位的每种特定组合视为不同的数据类型。DECIMAL(4,2)和DECIMAL(6,4)是不同的数据类型。这意味着11.22和11.2222是不同的类型,尽管float并非如此。对于FLOAT(6),11.22和11.2222是相同的数据类型。
字段类型“十进制”是好的。
如果您有较高的价格,则可以使用,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)
。
我不会使用float,因为那样会产生舍入错误,因为它是浮点类型。
使用十进制:
“ DECIMAL和NUMERIC类型用于存储对于保留精确度非常重要的值,例如对于货币数据而言。”
我更喜欢INT(价格乘以100),它可以解决其他软件中的浮点问题。
十进制是错误的,因为如果您想将价格设置为十进制12.99,则将其设置为13.00。这是错误的,但是如果您使用float,则可以将其另存为12.99。因此正确的答案是float和varchar。