13

以下查询:

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)

请帮我找出错误。

4

2 回答 2

17

我相信您遇到此错误是因为该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)运行插入语句...:

INSERT INTO testtable (testcolumn) VALUES (23.45)

...并收到此错误...

消息 8115,级别 16,状态 8,第 1
行将数字转换为数字数据类型的算术溢出错误。

(评论:我最喜欢的错误之一......“无法将数字转换为数字......”哈哈)

3) 将色谱柱更改为适当的规格

ALTER TABLE testtable ALTER COLUMN testcolumn DECIMAL(4,2)

4) 重新运行相同的插入语句。有用。

请让我知道这可不可以帮你。

于 2013-01-08T14:18:12.870 回答
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。

于 2013-01-08T14:14:22.040 回答