以下查询:
INSERT INTO skill (`emp_number`, `skill_id`, `year_exp`, `comments`)
VALUES ('4', '3', '23.45', '')
产生错误:
1 row inserted.
Warning: #1264 Out of range value for column 'year_exp' at row 1
year_exp column is of datatype decimal(2,2)
请帮我解决错误。
答案 0 :(得分:13)
我认为您遇到此错误,因为year_exp
字段为DECIMAL(2,2)
,您想要DECIMAL(4,2)
。 DECIMAL(2,2)
表示精度数2,最多2位小数。但是这个数字有4位精度。
此MSDN链接说明了小数精度。
http://msdn.microsoft.com/en-US/library/ms187746(v=SQL.90).aspx
这是一个类似结果的快速测试(在SQL Server 2008中完成,但我认为你在使用MySQL ......)
1)创建了一个包含测试列的表:
CREATE TABLE testtable (testcolumn DECIMAL(2,2))
2)Ran insert statement ...:
INSERT INTO testtable (testcolumn) VALUES (23.45)
...并收到此错误......
Msg 8115,Level 16,State 8,Line 1
算术溢出错误将数字转换为数据类型数字。
(评论:我最喜欢的一个错误......“无法将数字转换为数字......”哈哈)
3)将列改为适当的规格
ALTER TABLE testtable ALTER COLUMN testcolumn DECIMAL(4,2)
4)重新运行相同的插入语句。有用。
如果有帮助,请告诉我。
答案 1 :(得分:10)
将字段类型更改为decimal(4,2)
。详情:https://dev.mysql.com/doc/refman/5.7/en/precision-math-decimal-characteristics.html
DECIMAL列的声明语法是DECIMAL(M,D)。 MySQL 5.7中参数的值范围如下:
M是最大位数(精度)。它的范围是1到65.
D是小数点右边的位数(刻度)。它的范围为0到30,且不得大于M.