如何将DECIMAL插入MySQL数据库

Ale*_*lex 28 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`)
)
Run Code Online (Sandbox Code Playgroud)

这是我的添加查询:

INSERT INTO mytable (`id`,`title`,`cost`) 
VALUES (0, 'test title', '3.80')
Run Code Online (Sandbox Code Playgroud)

更新: 在我改变4,2到6,2之后它可以工作

JYe*_*ton 35

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

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

因此,(4,2)可以是任何东西-99.9999.99.

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

编辑

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


Mar*_*c B 7

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


Opt*_*tiq 6

我注意到关于你的编码的其他东西......看

INSERT INTO reports_services (id,title,description,cost) VALUES (0, 'test title', 'test decription ', '3.80')
Run Code Online (Sandbox Code Playgroud)

在您的“CREATE TABLE”代码中,您将 id 设置为“AUTO_INCREMENT”,这意味着它会自动为该字段生成结果....那里有一个 0... idk 如果这是你告诉我们你将它留空的方式,因为它被设置为 AUTO_INC。或者,如果这是您拥有的实际代码...

'0',
Run Code Online (Sandbox Code Playgroud)

你把

0,
Run Code Online (Sandbox Code Playgroud)

大声笑......所以这可能会导致一些问题......我还注意到在“测试描述”之后的代码中你在'......之前有一个空格......这可能也会抛出一些东西...... . idk .. 我希望这会有所帮助 n 也许可以解决您现在可能正在拔头发的其他一些问题.... ... 祝你好运.. :)

更新.....

我差点忘了……如果你有 0 来表明它是空白的……你可以输入“测试标题”作为 ID,输入“测试描述”作为标题,然后输入“3.whatever cents”作为描述离开“成本”为空......这可能就是它最大化的原因,因为如果我没有误会你将它设置为NOT NULL......你把它留空......所以它强迫了一些......也许……哈哈

  • 感谢您的回答 - 不过在您添加您的答案前 2 个月,我已经接受了正确答案!将“0”传递给设置为“auto_increment”的字段与将其留空相同。 (2认同)