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.99来99.99.
至于为什么要获得99.99而不是所需3.80的值,您插入的值必须被解释为大于99.99,因此使用最大值.也许您可以发布用于插入或更新表的代码.
编辑
根据http://dev.mysql.com/doc/refman/5.0/en/numeric-types.html更正了对比例和精度使用的误解.
是的,4,2表示"总共4位数,其中2位在小数位后".这转换为格式的数字00.00.除此之外,您还必须向我们展示您的SQL查询.没有充分理由,PHP不会将3.80翻译成99.99.也许您在查询中未对齐字段/值,并尝试插入属于另一个字段的较大数字.
我注意到关于你的编码的其他东西......看
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......你把它留空......所以它强迫了一些......也许……哈哈
| 归档时间: |
|
| 查看次数: |
135808 次 |
| 最近记录: |