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,迁移也只是忽略这个特殊字符。

posted @ 2021-10-28 17:11  数据库集中营  阅读(306)  评论(0编辑  收藏  举报