警告#1264:mysql超出范围错误

Mis*_*sty 10 mysql decimal

以下查询:

INSERT INTO skill (`emp_number`, `skill_id`, `year_exp`, `comments`)
VALUES ('4', '3', '23.45', '')
Run Code Online (Sandbox Code Playgroud)

它产生错误:

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)
Run Code Online (Sandbox Code Playgroud)

请帮我解决错误.

小智 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))
Run Code Online (Sandbox Code Playgroud)

2)Ran插入声明......:

INSERT INTO testtable (testcolumn) VALUES (23.45)
Run Code Online (Sandbox Code Playgroud)

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

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

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

3)将柱子改为适当的规格

ALTER TABLE testtable ALTER COLUMN testcolumn DECIMAL(4,2)
Run Code Online (Sandbox Code Playgroud)

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

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


lon*_*ong 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.