如何将DECIMAL插入MySQL数据库

时间:2011-08-09 16:32:06

标签: mysql database database-design decimal

我有一个包含某些字段的数据库表,其中一个字段cost被设置为DECIMAL数据类型。我将参数设置为4,2,这应该允许小数点前4个数字,之后2个。

(我被告知4这里是总金额,而2是小数点后的金额,有人可以在旁注上清楚吗?)

当我通过POST请求插入数据时(例如值3.80),存储到我的数据库的数据实际上是99.99

导致这种情况我做错了什么?

这是表格:

CREATE TABLE IF NOT EXISTS `mytable` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(256) NOT NULL,
`cost` decimal(4,2) NOT NULL,
PRIMARY KEY (`id`)
)

这是我的添加查询:

INSERT INTO mytable (`id`,`title`,`cost`) 
VALUES (0, 'test title', '3.80')

更新: 在我改变4,2到6,2

后,它可以正常工作

3 个答案:

答案 0 :(得分:34)

MySql十进制类型比小数点左侧和右侧稍微复杂一点。

第一个参数是精度,即总位数。第二个参数是 scale ,它是小数点右边的最大位数。

因此,(4,2)可以是-99.9999.99之内的任何内容。

至于为什么您获得99.99而不是期望的3.80,您插入的值必须被解释为大于99.99,因此使用最大值。也许您可以发布用于插入或更新表格的代码。

修改

根据http://dev.mysql.com/doc/refman/5.0/en/numeric-types.html更正了对比例和精度使用的误解。

答案 1 :(得分:7)

是的,4,2表示“总共4位数,其中2位在小数位后”。这转换为00.00格式的数字。除此之外,您还必须向我们展示您的SQL查询。没有充分理由,PHP不会将3.80翻译成99.99。也许您在查询中未对齐字段/值,并尝试插入属于另一个字段的较大数字。

答案 2 :(得分:3)

我注意到你的编码还有其他的东西......看看

INSERT INTO reports_services (id,title,description,cost) VALUES (0, 'test title', 'test decription ', '3.80')

在“CREATE TABLE”代码中,您将id设置为“AUTO_INCREMENT”,这意味着它会自动生成该字段的结果....但在上面的代码中,您将其作为插入之一包含在“ VALUES“你有一个0 ... idk如果这是你告诉我们你把它留空的方式,因为它被设置为AUTO_INC。或者如果这是你拥有的实际代码...如果它是代码,你不仅不应该尝试将数据发送到字段集以自动生成它,而且正确的做法是

'0',

你把

0,

大声笑....所以这可能会导致一些问题...我也只是在“测试描述”之后的代码中注意到你在'....之前有一个空间也可能会抛出一些东西.... idk ..我希望这有助于解决一些其他问题,你现在可能会把你的头发拉出来....说到哪......我需要弄清楚我的问题然后撕掉我的头发出.....祝你好运.. :)

UPDATE .....

我差点忘了......如果你有0那里显示它是空白的......你可以输入“测试标题”作为id和“测试描述”作为标题然后“3.whatever cents”for描述让“成本”空了......这可能就是为什么它最大化了,因为如果我没有误会你把它设置为NOT NULL ....你把它留空了...所以它强迫了一些东西......也许......大笑