KingbaseES 参数 - ignore_char_null_check
KingbaseES 基于PostgreSQL进行了大量的Oracle兼容性开发,为了能同时兼容Oracle 和 PG 的特性,增加参数进行控制。以下介绍 KingbaseES 下特有的参数 ignore_char_null_check
功能作用:KES 内部是拿 0x00 作为字符的结束符的。字符里边不允许含有0x00,如果一个字符串里边还有0x00的话,会被截断。参数默认值为 off ,也就是会检查字符串是否有 0x00 字符,这也是 PG 的行为。
1、Oracle对于ascii 0 字符处理
oracle对于ascii 为 0 的字符作为一个字符处理。
SQL> select 'a'||chr(0)||'b' from dual; 'A' --- a b SQL> select length('a'||chr(0)||'b') from dual; LENGTH('A'||CHR(0)||'B') ------------------------ 3
2、PG对于ascii 0 处理
testdb=# select E'\x00'; ERROR: invalid byte sequence for encoding "UTF8": 0x00
3、KingbaseES 对于ascii 0 处理
test=# set ignore_char_null_check=off; SET test=# select E'\x00'; ERROR: invalid byte sequence for encoding "UTF8": 0x00 test=# set ignore_char_null_check=on; SET test=# select E'\x00'; ?column? ---------- (1 row) test=# select 'a'||E'\x00'||'b'; ?column? ---------- ab (1 row)
总结:该参数是为迁移oracle数据而专门设置的,需要看看oracle那边,哪个字段里边有0x00,如果是clob的话就没啥问题,如果是varchar这种,就有风险。建议在迁移时打开,迁移后关闭。你可以看到,参数值为on,迁移也只是忽略这个特殊字符。
知识分享,需人人参与,看完请点赞留言,共同讨论进步