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