背景
要对比两个库的同一张表的数据差异性,通过工具导出chr(0)的时候,它会自动转换成null,然而数据库中chr(0)并不是null,也就是说导出来再导进去的数据已经跟原始表的数据不一样,进而导致数据比对时,出现差异,影响比对结果。
影响
ascii的0
是个空字符,如果将这个字符插入到oracle数据库中,会导致查询出来结果中,看到是空白数据,但用 is null, =''
都无法判断;
原因
- ascii为0插入到oracle中,并不是null,它占用一个字节,要查询出来只能用=chr(0)
- 尽量别插入ascii为0的字符到数据库中,可以用插入空字符串或者null代替
解决过程
(1)先使用ascii(有问题的列)
函数查看出为0
,0在ascii中为空字符;等价于chr(0)
(2)使用replace(有问题的列, chr(0), '')
,将ascii的0
替换为可识别的空字符串;
(3)转为可识别的字符串后,就能用="
来判断空字符串了。