MogDB MySQL兼容性模式导致生产案例

原作者:赵安琪

基于MogDB版本V2.0.1

问题现象

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

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

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

后续通过一系列的排查,发现研发测试环境使用了B - MySQL兼容性模式对数字类型插入空字符串正常,但是在生产环境中,数据库类型为A - Oracle模式,该模式下对于将空字符(‘’)插入到数字类型的字段中,会包括退出。

场景复原

模拟现场如下:

create table t ( id int,, 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