首页 > 数据库 >兼容模式下导致数值类型发生隐式转换,SQL在生产上无法正常使用案例

兼容模式下导致数值类型发生隐式转换,SQL在生产上无法正常使用案例

时间:2024-03-30 11:45:11浏览次数:29  
标签:05 SQL numeric 兼容 time 隐式

兼容模式下导致数值类型发生隐式转换,SQL 在生产上无法正常使用案例
本文出处:https://www.modb.pro/db/403148

基于 MogDB 版本 V2.0.1

问题现象
厂商研发描述 Insert SQL 在生产上无法执行,而测试环境中同版本的数据库该 SQL 可以正常运行。

检查 SQL 后,发现是很简单的 insert into values 语句,故障点是将 ‘’ 值插入到了 numeric 数据类型的字段中,提示“invalid input syntax for type numeric”,中断 SQL 执行。一切都很正常。

但是之后跟研发沟通后,在研发的测试环境中, ‘’ 还就真的插入到了 numeric 中,而且语句也是简单 insert into values,没有做任何数据类型转换。

场景复原
模拟现场如下:

create table t (
id int,
trade_time timestamp(0) without time zone,
position numeric(24,2));

insert into t(id,trade_time,position)
values(1,to_date('2022-05-13 11:05:00','YYYY-MM-DD HH24:MI:SS'),'');

ERROR: invalid input syntax for type numeric: ""
LINE 2: ...,to_date('2022-05-13 11:05:00','YYYY-MM-DD HH24:MI:SS'),'');
^
CONTEXT: referenced column: position

处理思路
第一思路是是否发生了自动或者隐式转换,但是翻了整个手册,还是没有发现线索,由于应用还在测试,问题不是很急,当天下午就处理别的问题了,在下班的时候重新复盘一下故障现象(不得不说上下班真的是头脑风暴的好时间啊),对将这种字符当做数值型处理隐约有些熟悉,回家闷头翻书,果然发现,在 Mysql 数据库中,对于一个 numeric 类型字段,当传入一个字符串时,会自动转换为 0。

对应到 Mogdb 数据库,Mogdb 数据库本身支持多数据库兼容模式,兼容模式包括 Oracle,MySQL,PostgreSQL。由于测试环境的 Mogdb 数据库都是 PG 兼容模式,形成了了思维惯性。一直以为故障时由于发生隐式转换导致的。

在测试环境下,重新建立了一个 MySQL 兼容库,验证了一下,确认’'可以被插入到 numeric 字段中,并显示为 0。

场景复现
create database db_mysql DBCOMPATIBILITY='B';

select datname,datcompatibility from pg_database;

\c db_mysql
create table t (
id int,
trade_time timestamp(0) without time zone,
position numeric(24,2));
insert into t(id,trade_time,position)
values(1,to_date('2022-05-13 11:05:00','YYYY-MM-DD HH24:MI:SS'),'');

select * from t;

总结
正好昨天杨明翰杨老师的恩墨直播培训提到了这里,杨老师的分析更加清晰,截图奉上:

标签:05,SQL,numeric,兼容,time,隐式
From: https://www.cnblogs.com/helloopenGauss/p/18105274

相关文章

  • SQL Server 附加数据库提示5120错误
    SQLServer附加数据库提示5120错误怎么样是不是跟你的错误是一样的,心里是不是有点小激动?T_T终于有办法了!!!! 第一步先关掉你的SQLserver然后在菜单上找找到SQLSERVER右键选择“以管理员运行” 第二步给你的数据库文件所在文件夹给上“读取,写入”的权限。在附加数据库......
  • 毕业设计课题:机房预约系统,基于java+SSM+mysql
          一、前言介绍          网络的快速发展从根本上更改了世界各组织的管理方式,自二十世纪九十年代开始,我国的政府、企事业等单位就设想可以通过互联网系统来进行管理信息。由于以前存在各方面的原因,比如网络普及度低、用户不接受、互联网的相关法律法规也......
  • 毕业设计课题:交通事故信息管理系统,基于java+SSM+mysql
          一、前言介绍         系统管理也都将通过计算机进行整体智能化操作,对于交通事故档案管理系统所牵扯的管理及数据保存都是非常多的,例如管理员;个人中心、用户管理、部门信息管理、警察信息管理、事故类型管理、事故信息管理、档案类型管理、档案信息管理......
  • MySQL的InnoDB引擎的事务原理以及MVCC
    目录一、事务原理二、redolog三、undolog四、MVCC    1.基础概念    2.隐藏字段    3.undolog        4.readview        5.原理分析一、事务原理        1).事务        事务是一组操作的集合,它......
  • openGauss 慢SQL诊断
    慢SQL诊断可获得性本特性自openGauss1.1.0版本开始引入。重构前慢SQL相关视图已废弃,包括dbe_perf.gs_slow_query_info、dbe_perf.gs_slow_query_history、dbe_perf.global_slow_query_hisotry、dbe_perf.global_slow_query_info。本特性自openGauss3.1.0版本支持备机。......
  • openGauss 慢SQL发现
    慢SQL发现可获得性本特性自openGauss1.1.0版本开始引入。特性简介本功能是一个SQL语句执行时间预测工具,通过模板化方法,实现在不获取SQL语句执行计划的前提下,依据语句逻辑相似度与历史执行记录,预测SQL语句的执行时间。客户价值工具不需要用户提供SQL执行计划,对数据库性能不......
  • openGauss 慢SQL根因分析
    慢SQL根因分析可获得性本特性自openGauss3.0.0开始引入。特性简介慢SQL一直是数据运维中的痛点问题,如何有效诊断慢SQL根因是当前一大难题,工具结合openGauss自身特点融合了现网DBA慢SQL诊断经验,该工具可以支持慢SQL根因15+,能同时按照可能性大小输出多个根因并提供针对性的建议......
  • mysql之MyBatis核心工作原理
    MyBatis核心工作原理一、源码环境1.手动编译源码工欲善其事必先利其器。为了方便我们在看源码的过程中能够方便的添加注释,我们可以自己来从官网下载源码编译生成对应的Jar包,然后上传到本地maven仓库,再引用这个Jar。大家可以自行去官网下载*gitclonehttps://github.co......
  • java Web洗衣店管理系统用eclipse定制开发mysql数据库BS模式java编程jdbc
    一、源码特点   JSP洗衣店管理系统是一套完善的web设计系统,对理解JSPjava编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,eclipse开发,数据库为Mysql5.0,使用java语言开发。javaWeb洗衣店管理系统二、功能介绍(......
  • java Web 疫苗预约管理系统用eclipse定制开发mysql数据库BS模式java编程jdbc
    一、源码特点   JSP疫苗预约管理系统是一套完善的web设计系统,对理解JSPjava编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,eclipse开发,数据库为Mysql5.0,使用java语言开发。javaWeb疫苗预约管理系统二、功能介......