decimal数据库字段类型,执行异常

【 使用环境 】生产环境
【 使用版本 】4.2.0_CE
【问题描述】

INSERT INTO report_rate (name,match_prefix,num_length,rate,billable_unit) VALUES (‘sdfsdf’,’’,-1,1.10,5);

数据库字段如上,这条语句在dbserver工具上可以执行成功,但在控制台上执行报错:

ERROR 1264 (22003): Out of range value for column ‘rate’ at row 1

2 个赞

为什么会越界:可能是字符太长,数字太大等等都有可能。 等待下4.2.1版本吧

1 个赞
  1. 但是在dbserver工具里面执行成功了
  2. 4.2.1 社区版什么时候有? 目前看只有企业版的4.2.1
1 个赞

感觉不像是插入 1.10 这条 SQL 报的错,先看日志确认一下报错时插入的数据是不是 1.10 ?

例如我往 decimal(12, 5) 的列里插入两条数据,第一条 1234567.12345 有 12 个有效数字,插入成功了,第二条 12345678.12345 有 13 个有效数字,插入失败了,符合预期。
image

然后看一下 trace id,搜索一下失败的日志中显示的插入失败的数字是不是您的 1.10,比如我拿着 trace id 在日志里搜索到的插入失败的数字就是我这个有 13 位有效数字的东西,是符合预期的。

为啥要等待 4.2.1 版本?是修复了什么相关的已知 bug 吗?

2 个赞

4.2版本在 insert 越界时不提示列名 - #9,来自 渠磊 可以参考下这个帖子里的问题,问题是一样的

1 个赞

不一样,这个已经提示列名叫 rate 了~

1 个赞

@AntTech_OMFHF3
你好,这个问题还能复现并提供日志信息吗?最近遇到同版本类似的问题,操作的时系统表,但环境比较特殊,暂时没定位出原因,如果现场还能模拟复现,可以提供下日志,我们再确认下是否是缺陷。

可以复现。ky10系统
PS:此问题复现时,创建普通租户也是报错