严格模式下插入数据时INT和DECIMAL自动四舍五入问题

【 使用环境 】测试环境
【 OB or 其他组件 】OB
【 使用版本 】5.7.25-OceanBase_CE-v4.3.5.2
【问题描述】已设置sql_mode中包含STRICT_TRANS_TABLES和STRICT_ALL_TABLES,使用INSERT插入数据时,对INT字段插入小数或对DECIMAL插入更多小数数位,会自动四舍五入。
【复现路径】
sql_mode:
select @@sql_mode;
PIPES_AS_CONCAT,ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER

建表语句:
create table testint(x int);
create table testdecimal (x decimal(5,2));

插入语句:
insert into testint values (23.11);
insert into testdecimal values (45.1111);[会输出warning:Data truncated for column ‘x’ at row 1]

查询结果:

@论坛小助手
有什么解决办法直接报错嘛而不是自动四舍五入嘛?

1 个赞

在这个问题中,用户提到的是关于 SQL 模式设置与预期行为不符的情况。但是,根据您提供的问题,obdiag 工具可能并不直接适用于这种情况,因为 obdiag 主要用于收集日志和分析性能或系统故障类问题,而您遇到的问题更倾向于配置和行为理解上的问题。

不过,我们可以尝试通过日志收集来检查是否有关于 SQL 模式配置的警告或错误信息,这可能会帮助我们进一步了解为什么 SQL 模式的设置没有按照预期工作。

日志采集场景: SQL 执行出错
日志采集命令: obdiag gather scene run --scene=observer.sql_err --env “{db_connect=’-h127.0.0.1 -P2881 -utest@test -p****** -Dtest’, trace_id=‘Yxx’}”

请您执行上述命令,并将生成的日志文件提供给我们。同时,为了更好地帮助您解决这个问题,请您回答以下问题:

  1. 您当前使用的 OceanBase 版本是什么?
  2. 您是如何设置 sql_mode 的?是在全局设置还是针对特定的会话设置?
  3. 您可以提供一个具体的例子,展示哪些数据被四舍五入,以及您期望的行为吗?
  4. 您是否有查看过 OceanBase 的官方文档或社区论坛,尝试找到类似的解决方案?

通过这些问题的回答,我们可以更准确地定位问题所在,并为您提供更有效的帮助。

附上敏捷诊断工具 obdiag 使用帮助链接

1 个赞

感谢

1 个赞

2222