平台和客户端兼容性
很多平台都使用数据库系统,数据库系统的对外兼容性给平台提供了很大的方便。
transform_null_equals
参数说明:控制表达式expr = NULL(或NULL = expr)当做expr IS NULL处理。如果expr得出NULL值则返回真,否则返回假。
- 正确的SQL标准兼容的expr = NULL总是返回NULL(未知)。
- Microsoft Access里的过滤表单生成的查询使用expr = NULL来测试空值。打开这个选项,可以使用该接口来访问数据库。
该参数属于USERSET类型参数,请参考表2中对应设置方法进行设置。
取值范围:布尔型
- on表示控制表达式expr = NULL(或NULL = expr)当做expr IS NULL处理。
- off表示不控制,即expr = NULL总是返回NULL(未知)。
默认值:off
新用户经常在涉及NULL的表达式上语义混淆,故默认值设为off。
support_extended_features
参数说明:控制是否支持数据库的扩展特性。
该参数属于POSTMASTER类型参数,请参考表2中对应设置方法进行设置。
取值范围:布尔型
- on表示支持数据库的扩展特性。
- off表示不支持数据库的扩展特性。
默认值:off
lastval_supported
参数说明:控制是否可以使用lastval函数。
该参数属于POSTMASTER类型参数,请参考表2中对应设置方法进行设置。
取值范围:布尔型
- on表示支持lastval函数,同时nextval函数不支持下推。
- off表示不支持lastval函数,同时nextval函数可以下推。
默认值:off
sql_compatibility
参数说明:控制数据库的SQL语法和语句行为同哪一个主流数据库兼容。该参数属于INTERNAL类型参数,用户无法修改,只能查看。
取值范围:枚举型
- ORA表示同oracle兼容。
- TD表示同Teradata兼容。
- MYSQL表示同MySQL兼容。
- PG表示同PostgreSQL兼容。
默认值:MYSQL
- 该参数只能在执行CREATE DATABASE命令创建数据库的时候设置。
- 在数据库中,该参数只能是确定的一个值,要么始终设置为ORA,要么始终设置为TD,请勿任意改动,否则会导致数据库行为不一致。
behavior_compat_options
参数说明:数据库兼容性行为配置项,该参数的值由若干个配置项用逗号隔开构成。
该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。
取值范围:字符串
默认值:""
- 当前只支持平台和客户端兼容性。
- 配置多个兼容性配置项时,相邻配置项用逗号隔开,例如:set behavior_compat_options='end_month_calculate,display_leading_zero';
兼容性配置项 |
兼容性行为控制 |
||||
---|---|---|---|---|---|
display_leading_zero |
浮点数显示配置项。
|
||||
end_month_calculate |
add_months函数计算逻辑配置项。 假定函数add_months的两个参数分别为param1和param2,param1的月份和param2的和为月份result。
|
||||
compat_analyze_sample |
analyze采样行为配置项。 设置此配置项时,会优化analyze的采样行为,主要体现在analyze时全局采样会更精确的控制在3万条左右,更好的控制analyze时Coordinator端的内存消耗,保证analyze性能的稳定性。 |
||||
bind_schema_tablespace |
绑定模式与同名表空间配置项。 如果存在与模式名sche_name相同的表空间名,那么如果设置search_path为sche_name,default_tablespace也会同步切换到sche_name。 |
||||
bind_procedure_searchpath |
未指定模式名的数据库对象的搜索路径配置项。 在存储过程中如果不显示指定模式名,会优先在存储过程所属的模式下搜索。 如果找不到,则有两种情况:
|
||||
correct_to_number |
控制to_number()结果兼容性的配置项。 若设置此配置项,则to_number()函数结果与pg11保持一致,否则默认与oracle保持一致。 |
||||
unbind_divide_bound |
控制对整数除法的结果进行范围校验。 若设置此配置项,则不需要对除法结果做范围校验,例如,INT_MIN/(-1)可以得到输出结果为INT_MAX+1,反之,则会因为超过结果大于INT_MAX而报越界错误。 |
||||
convert_string_digit_to_numeric |
控制是否将表中字符串类型字段和数字类型做比较时统一都转换为numeric类型再进行比较。 |
||||
return_null_string |
控制函数lpad()和rpad()结果为空字符串''的显示配置项。
|
||||
compat_concat_variadic |
控制函数concat()和concat_ws()对variadic类型结果兼容性的配置项。 若设置此配置项,当concat函数参数为variadic类型时,保留oracle和Teradata兼容模式下不同的结果形式;否则默认oracle和Teradata兼容模式下结果相同,且与oracle保持一致。由于mysql无variadic类型,所以该选项对MySQL无影响。 |
||||
merge_update_multi |
控制在使用MERGE INTO ... WHEN MATCHED THEN UPDATE(参考MERGE INTO)和INSERT ... ON DUPLICATE KEY UPDATE(参考INSERT)时,当目标表中一条目标数据与多条源数据冲突时UPDATE行为。 若设置此配置项,当存在上述场景时,该冲突行将会多次执行UPDATE;否则(默认)报错,即MERGE或INSERT操作失败。 |
||||
plstmt_implicit_savepoint |
控制存储过程中更新语句的执行是否拥有独立的子事务。 若设置此配置项,存储过程中每条更新语句前开启隐式保存点,EXCEPTION块中默认回退到最近的保存点,从而保证只回退失败语句的修改。该选项是为了兼容O数据库的EXCEPTION行为。 |
||||
hide_tailing_zero |
numeric显示配置项。不设置此项时,numeric按照指定精度显示;设置此项时,所有输出numeric的场景均隐藏小数点后的末尾0,包括显示指定format精度情况。 例如: set behavior_compat_options='hide_tailing_zero'; select cast(123.123 as numeric(15,10)); numeric --------- 123.123 (1 row) |
||||
plsql_security_definer |
开启此参数后,创建存储过程时默认为定义者权限。 |
||||
char_coerce_compat |
控制char(n)类型向其它变长字符串类型转换时的行为。默认情况下char(n)类型转换其它变长字符串类型时会省略尾部的空格,开启该参数后,转换时不再省略尾部的空格,并且在转换时如果char(n)类型的长度超过其它变长字符串类型时将会报错。该参数仅在sql_compatibility参数的值为ORA时生效,并且开启该参数后无论是隐式转换、显式转换还是通过调用text(bpchar)函数转换类型都不再省略尾部空格。 |
||||
truncate_numeric_tail_zero |
numeric显示配置项。不设置此项时,numeric按照默认精度显示;设置此项时,除去to_char(numeric, format)这种显示设置精度的情况,所有输出numeric的场景均会隐藏小数点后的末尾0。 |
||||
array_count_compat |
控制array.count函数,参数开启时,函数返回0,否则返回null。 |
||||
aformat_regexp_match |
控制正则表达式函数的匹配行为。
设置此项,且sql_compatibility参数的值为A或B时,正则表达式的 flags 参数支持的选项含义有变更:
否则,正则表达式的 flags 参数支持的选项含义:
|
||||
disable_emptystr2null |
关闭text、clob、blob、raw字符串类型默认将空串转换为null功能。 |
a_format_version
参数说明:数据库平台兼容性行为配置项,该参数的值为字符串枚举值。
该参数属于USERSET类型参数,请参考表2中对应设置方法进行设置。
取值范围:字符串
默认值:""
兼容性配置项时设置字符串,例如:set a_format_version='10c';
兼容性配置项 |
兼容性行为控制 |
---|---|
10c |
A平台兼容版本。 |
a_format_dev_version
参数说明:数据库平台迭代小版本兼容性行为配置项,该参数的值为字符串枚举值。
该参数属于USERSET类型参数,请参考表2中对应设置方法进行设置。
取值范围:字符串
默认值:""
兼容性配置项时设置字符串,例如:set a_format_dev_version='s1';
兼容性配置项 |
兼容性行为控制 |
---|---|
s1 |
|
plpgsql.variable_conflict
参数说明:设置同名的存储过程变量和表的列的使用优先级。
该参数属于USERSET类型参数,仅支持表2中对应设置方法3进行设置。
取值范围:字符串
- error表示遇到存储过程变量和表的列名同名则编译报错。
- use_variable表示存储过程变量和表的列名同名则优先使用变量。
- use_column表示存储过程变量和表的列名同名则优先使用列名。
默认值:error
td_compatible_truncation
参数说明:控制是否开启与Teradata数据库相应兼容的特征。该参数在用户连接上与TD兼容的数据库时,可以将参数设置成为on(即超长字符串自动截断功能启用),该功能启用后,在后续的insert语句中,对目标表中char和varchar类型的列插入超长字符串时,会按照目标表中相应列定义的最大长度对超长字符串进行自动截断。保证数据都能插入目标表中,而不是报错。
超长字符串自动截断功能不适用于insert语句包含外表的场景。
如果向字符集为字节类型编码(SQL_ASCII,LATIN1等)的数据库中插入多字节字符数据(如汉字等),且字符数据跨越截断位置,这种情况下,按照字节长度自动截断,自动截断后会在尾部产生非预期结果。如果用户有对于截断结果正确性的要求,建议用户采用UTF8等能够按照字符截断的输入字符集作为数据库的编码集。
该参数属于USERSET类型参数,请参考表2中对应设置方法进行设置。
取值范围:布尔型
- on表示启动超长字符串自动截断功能。
- off表示停止超长字符串自动截断功能。
默认值:off
nls_timestamp_format
参数说明:设置时间戳默认格式。
该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。
取值范围:字符串
默认值:DD-Mon-YYYY HH:MI:SS.FF AM
max_function_args
参数说明:函数参数最大个数。
该参数属于INTERNAL类型参数,为固定参数,用户无法修改此参数,只能查看。
取值范围:整型
默认值:8192
convert_string_to_digit
参数说明:设置隐式转换优先级,是否优先将字符串转为数字。
该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。
取值范围:布尔型
- on表示优先将字符串转为数字。
- off表示不优先将字符串转为数字。
默认值:on
该参数调整会修改内部数据类型转换规则,导致不可预期的行为,请谨慎调操作。