云数据库 GAUSSDB-平台和客户端兼容性:support_zero_character
support_zero_character
参数说明:当数据中包含Unicode编码为\u0000的字符(以下简称0字符)时,数据库是否取消对0字符的校验并且正确处理而不进行截断操作。
参数类型:布尔型
参数单位:无
取值范围:
- on:表示开启,数据库取消对0字符的校验,能够正确插入和处理0字符,使数据在处理过程中不发生截断。
- off:表示关闭,数据库保留对0字符的校验,部分函数在处理0字符时会发生报错或数据截断。
默认值:off
设置方式:该参数属于POSTMASTER类型参数,请参考表1中对应设置方法进行设置。
设置建议:推荐使用默认值,仅在数据中存在0字符且需要对0字符进行正确处理时开启该参数。
设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。
- 该参数仅在数据库兼容性为A兼容模式且所有节点都设置为support_zero_character=on时生效。
- 当support_zero_character=on时,如果数据类型为CHAR(n)、CHARACTER(n)、NCHAR(n)、VARCHAR(n)、CHARACTER VARYING(n)、VARCHAR2(n)、NVARCHAR2(n)、TEXT或CLOB类型,数据库可以正确插入并处理0字符;如果包含0字符的字符串数据可以显式转换为JSON/JSONB、XML、XMLTYPE、数值类型、货币类型、时间类型、几何类型、网络地址类型、位串类型、文本搜索类型、HLL类型、范围类型、对象标识符类型、aclitem类型或向量类型时,会在0字符处发生截断;如果字符串类型显式转换为UUID类型时,会在0字符处发生报错。
- 数据库仅支持以下写入0字符的方式:
- 通过JDBC连接数据库时,0字符可以通过文本方式写入数据库。
- 通过dbe_raw.cast_to_varchar2函数直接将0字符编码写入数据库。
- 通过copy/gs_loader工具将0字符编码写入数据库。
- 在开启GUC参数时,不同字符集之间进行转换时,0字符会直接返回,不再发生报错。
- gsql客户端版本应与数据库版本匹配,在开启GUC参数时,若gsql端接收到的数据中包含0字符,gsql工具会将0字符转换为空格后进行打印输出。若使用旧版本gsql连接数据库,包含0字符的数据仍存在显示被截断的情况。
- 当开启GUC参数时,0字符在表15所列的函数、高级包函数中的表现为:函数能够正常处理0字符,不会发生在0字符处截断的情况。
- 部分高级包接口入参为Schema名或object名,理论上不能含有0字符,因此对表16中的函数添加0字符校验,当入参包含0字符时进行报错处理(原表现为0字符后数据被截断)。
- 当support_zero_character=on时,若处理的数据中不包含0字符,函数性能无明显劣化;若处理的数据中包含0字符,对比相同数量的有效字符时,initcap、upper、lower、nls_upper、nls_lower函数性能劣化程度与数据中0字符个数紧密相关,即0字符个数越多,性能劣化越严重。
- 当support_zero_character=on时,若逻辑解码工具读取到数据中包含的0字符,则会将0字符转换为空格后进行打印输出(原表现为0字符后数据被截断)。
序号 |
函数名/高级包函数名 |
---|---|
1 |
btrim(string text [, characters text]) |
2 |
char_length(string) 或 character_length(string) |
3 |
chr(cvalue int|bigint) |
4 |
chr(integer) |
5 |
coalesce(expr1, expr2, ..., exprn) |
6 |
concat(str1,str2) |
7 |
concat_ws(sep text, str"any" [, str"any" [, ...] ]) |
8 |
convert(string bytea, src_encoding name, dest_encoding name) |
9 |
convert_from(string bytea, src_encoding name) |
10 |
convert_to(string text, dest_encoding name) |
11 |
decode(base_expr, compare1, value1, Compare2,value2, … default) |
12 |
dump(expr[, return_fmt [, start_position [, length ] ] ]) |
13 |
encode(data bytea, format text) |
14 |
format(formatstr text [, str"any" [, ...] ]) |
15 |
greatest(expr1 [, ...]) |
16 |
group_concat([DISTINCT | ALL] expression [,expression ...] [ORDER BY { expression [ [ ASC | DESC | USING operator ] | nlssort_expression_clause ] [ NULLS { FIRST | LAST } ] } [,...]] [SEPARATOR str_val]) |
17 |
initcap(string) |
18 |
instr(string,substring[,position,occurrence]) instr(text,text,int,int) |
19 |
instrb(text,text,int,int) |
20 |
least(expr1 [, ...]) |
21 |
left(str text, n int) |
22 |
length(string) length(string bytea, encoding name ) |
23 |
lengthb(text/bpchar) |
24 |
listagg(expression [, delimiter]) WITHIN GROUP(ORDER BY order-list) |
25 |
lower(string) |
26 |
lpad(string text, length int [, fill text]) |
27 |
ltrim(string [, characters]) |
28 |
nls_lower(string [, nlsparam]) |
29 |
nls_upper(string [, nlsparam]) |
30 |
nullif(expr1, expr2) |
31 |
nvl( expr1 , expr2 ) |
32 |
nvl2( expr1 , expr2,expr3 ) |
33 |
overlay(string placing string FROM int [for int]) |
34 |
position(substring in string) |
35 |
quote_nullable(string text) |
36 |
regexp_count(string text, pattern text [, position int [, flags text]]) |
37 |
regexp_instr(string text, pattern text [, position int [, occurrence int [, return_opt int [, flags text]]]]) |
38 |
regexp_like(text,text,text) regexp_like(source_string, pattern [, match_parameter]) |
39 |
regexp_matches(string text, pattern text [, flags text]) |
40 |
regexp_replace(string, pattern, replacement [,flags ]) |
41 |
regexp_split_to_array(string text, pattern text [, flags text ]) |
42 |
regexp_split_to_table(string text, pattern text [, flags text]) |
43 |
regexp_substr(source_char, pattern) regexp_substr(string text, pattern text [, position int [, occurrence int [, flags text]]]) |
44 |
repeat(string text, number int ) |
45 |
replace(string text, from text, to text) replace(string, substring) |
46 |
reverse(str) |
47 |
right(str text, n int) |
48 |
rpad(string text, length int [, fill text]) |
49 |
rtrim(string [, characters]) |
50 |
similar_escape(pat text, esc text) |
51 |
split_part(string text, delimiter text, field int) |
52 |
string [NOT] LIKE pattern [ESCAPE escape-character] |
53 |
string || string 或 string || non-string 或 non-string || string |
54 |
string_agg(expression, delimiter) |
55 |
strpos(string, substring) |
56 |
substr(string,from) substr(bytea,from,count) substr(string,from,count) |
57 |
substrb(text,int) substrb(text,int,int) |
58 |
substring(string [from int] [for int]) substring(string from pattern for escape) substring(string from pattern) substring_inner(string [from int] [for int]) |
59 |
translate(string text, from text, to text) |
60 |
trim([leading |trailing |both] [characters] from string) |
61 |
unistr(string) |
62 |
upper(string) |
63 |
PKG_UTIL.LOB_GET_LENGTH |
64 |
PKG_UTIL.LOB_READ |
65 |
PKG_UTIL.LOB_WRITE |
66 |
PKG_UTIL.LOB_APPEND |
67 |
PKG_UTIL.LOB_COMPARE |
68 |
PKG_UTIL.LOB_MATCH |
69 |
PKG_UTIL.LOB_READ_HUGE |
70 |
PKG_UTIL.LOB_WRITEAPPEND_HUGE |
71 |
PKG_UTIL.LOB_APPEND_HUGE |
72 |
PKG_UTIL.LOB_COPY_HUGE |
73 |
PKG_UTIL.LOB_CONVERTTOBLOB_HUGE |
74 |
PKG_UTIL.IO_PRINT |
75 |
PKG_UTIL.RAW_CAST_FROM_VARCHAR2 |
76 |
PKG_UTIL.FILE_READ |
77 |
PKG_UTIL.FILE_REA DLI NE |
78 |
PKG_UTIL.APP_READ_CLIENT_INFO |
79 |
PKG_UTIL.APP_SET_CLIENT_INFO |
80 |
PKG_UTIL.LOB_CONVERTTOBLOB |
81 |
PKG_UTIL.LOB_CONVERTTOCLOB |
82 |
PKG_UTIL.MATCH_EDIT_DISTANCE_SIMILARITY |
83 |
PKG_UTIL.RAW_CAST_TO_VARCHAR2 |
84 |
PKG_UTIL.APP_SET_MODULE |
85 |
PKG_UTIL.APP_READ_MODULE |
86 |
PKG_UTIL.APP_SET_ACTION |
87 |
PKG_UTIL.APP_READ_ACTION |
88 |
DBE_OUTPUT.PRINT_LINE |
89 |
DBE_OUTPUT.PRINT |
90 |
DBE_OUTPUT.GET_LINE |
91 |
DBE_OUTPUT.GET_LINES |
92 |
DBE_OUTPUT.PUT |
93 |
DBE_OUTPUT.PUT_LINE |
94 |
DBE_UTILITY.CANONICALIZE |
95 |
DBE_UTILITY.COMMA_TO_TABLE |
96 |
DBE_UTILITY.NAME_TOKENIZE |
97 |
DBE_UTILITY.TABLE_TO_COMMA |
98 |
DBE_UTILITY.CANONICALIZE_RET |
99 |
DBE_UTILITY.COMMA_TO_TABLE_FUNC |
100 |
DBE_UTILITY.NAME_SEPARATE |
101 |
DBE_UTILITY.NAME_TOKENIZE_FUNC |
102 |
DBE_UTILITY.NAME_TOKENIZE_LOWER |
103 |
DBE_UTILITY.NAME_TOKENIZE_LOWER_FUNC |
104 |
DBE_UTILITY.TABLE_TO_COMMA_FUNC |
序号 |
高级包函数名 |
---|---|
1 |
PKG_UTIL.SESSION_SET_CONTEXT |
2 |
PKG_UTIL.UTILITY_COMPILE_SCHEMA |
3 |
PKG_UTIL.GS_COMPILE_SCHEMA |
4 |
DBE_UTILITY.NAME_RESOLVE |
5 |
DBE_UTILITY.COMPILE_SCHEMA |
6 |
DBE_UTILITY.SEARCH_CLASS_WITH_NSPOID_ONAME_TYPE |
7 |
DBE_UTILITY.SEARCH_OBJE CTS |
8 |
DBE_UTILITY.SEARCH_OBJECTS_SYNONYM_FILL_SCHEMA |
9 |
DBE_UTILITY.SEARCH_PROCEDURE_WITH_NSPOID_ONAME |
10 |
DBE_UTILITY.SEARCH_SYNONYM_WITH_NSPOID_ONAME |
- GaussDB学习_gaussdb教程_高斯数据库学习_华为云
- GaussDB考试_GaussDB数据库考试_高斯数据库考试_华为云
- GaussDB培训_GaussDB教程_高斯数据库培训-华为云
- GaussDB用法_GaussDB数据库使用方法_高斯数据库如何使用_华为云
- GaussDB数据库概念_openGauss_华为高斯数据库概念
- GaussDB数据库考试_GaussDB认证_高斯数据库考试_华为云
- GaussDB学习_gaussdb数据库_高斯数据库学习_华为云
- GaussDB使用技巧_高斯数据库下载_高斯数据库使用技巧_华为云
- GaussDB工具_gaussdb怎么读_高斯数据库工具_华为云
- GaussDB数据库安全_GaussDB收费吗_高斯数据库安全