云数据库 GAUSSDB-平台和客户端兼容性:support_zero_character

时间:2024-12-19 14:11:21

support_zero_character

参数说明当数据中包含Unicode编码为\u0000的字符(以下简称0字符)时,数据库是否取消对0字符的校验并且正确处理而不进行截断操作。

参数类型:布尔型

参数单位:

取值范围:

  • on:表示开启,数据库取消对0字符的校验,能够正确插入和处理0字符,使数据在处理过程中不发生截断。
  • off:表示关闭,数据库保留对0字符的校验,部分函数在处理0字符时会发生报错或数据截断。

默认值off

设置方式该参数属于POSTMASTER类型参数,请参考表1中对应设置方法进行设置。

设置建议推荐使用默认值,仅在数据中存在0字符且需要对0字符进行正确处理时开启该参数。

设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。

  1. 该参数仅在数据库兼容性为A兼容模式且所有节点都设置为support_zero_character=on时生效。
  2. 当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字符处发生报错。
  3. 数据库仅支持以下写入0字符的方式:
    • 通过JDBC连接数据库时,0字符可以通过文本方式写入数据库。
    • 通过dbe_raw.cast_to_varchar2函数直接将0字符编码写入数据库。
    • 通过copy/gs_loader工具将0字符编码写入数据库。
  4. 在开启GUC参数时,不同字符集之间进行转换时,0字符会直接返回,不再发生报错。
  5. gsql客户端版本应与数据库版本匹配,在开启GUC参数时,若gsql端接收到的数据中包含0字符,gsql工具会将0字符转换为空格后进行打印输出。若使用旧版本gsql连接数据库,包含0字符的数据仍存在显示被截断的情况。
  6. 当开启GUC参数时,0字符在表15所列的函数、高级包函数中的表现为:函数能够正常处理0字符,不会发生在0字符处截断的情况。
  7. 部分高级包接口入参为Schema名或object名,理论上不能含有0字符,因此对表16中的函数添加0字符校验,当入参包含0字符时进行报错处理(原表现为0字符后数据被截断)。
  8. 当support_zero_character=on时,若处理的数据中不包含0字符,函数性能无明显劣化;若处理的数据中包含0字符,对比相同数量的有效字符时,initcap、upper、lower、nls_upper、nls_lower函数性能劣化程度与数据中0字符个数紧密相关,即0字符个数越多,性能劣化越严重。
  9. 当support_zero_character=on时,若逻辑解码工具读取到数据中包含的0字符,则会将0字符转换为空格后进行打印输出(原表现为0字符后数据被截断)。
表15 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

表16 入参包含0字符进行报错处理的函数

序号

高级包函数名

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

support.huaweicloud.com/centralized-devg-v8-gaussdb/gaussdb-40-0365.html