最近,碰到这样一个问题,两个数据库的两个表结构一样,其中一张表将NULL视为空串,而另一个则相反,对比了两个数据库的配置参数发现不同之处如下图。
图左侧说明 Number compatibility = ON、Varchar2 compatibility = ON说明打开Oracle兼容,则该数据库将NULL视为空串,在数据表中若有字段不能为空,插入空串时,提示空值不能插入一个非空字段中;而图右侧则相反,说明没有打开Oracle兼容,使用的只是DB2自己的配置,而DB2将空串视为非空值(空串并不等于NULL值),所以为某个非空字段插入空串时可以成功。解决方案如下:分两种情况。
情况一 还没有创建数据库
步骤一:查看DB2实例的配置 db2set -all,若有下面的字样
DB2_COMPATIBILITY_VECTOR = ORA 说明打开了Oracel兼容,需要将其关掉
步骤二:更改DB2数据库配置 db2set DB2_COMPATIBILITY_VECTOR= 回车
再次,执行db2set -all,若不见DB2_COMPATIBILITY_VECTOR = ORA 说明更改成功。
步骤三:重启数据库 db2stop force ; db2start
步骤四:创建数据库:db2 \"CREATE db seatmap USING CODESET UTF-8 TERRITORY CN\";
步骤五:查看数据库的配置参数:首先,连接数据库 db2 connect to seatmap;其次,db2 get db cfg for seatmap进行查看数据库seatmap的配置参数。若看到Number compatibility 、Varchar2 compatibility 、Date compatibility 均等于OFF,说明已经关闭了。
情况二 已创建数据库
前三步同情况一。
步骤四:删除之前的数据库 db2 drop db seatmap
步骤五:创建数据库 db2 \"CREATE db seatmap USING CODESET UTF-8 TERRITORY CN\";
步骤六:查看数据库的配置参数:首先,连接数据库 db2 connect to seatmap;其次,db2 get db cfg for seatmap进行查看数据库seatmap的配置参数。若看到Number compatibility 、Varchar2 compatibility 、Date compatibility 均等于OFF,说明已经关闭了。
因篇幅问题不能全部显示,请点此查看更多更全内容