VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

MySQL兼容性参数

本文对Vastbase G100兼容MySQL支持的特性参数进行了详细描述,用户可以通过设置特性参数,实现对应功能。

lower_case_column_names

参数说明

参数lower_case_column_names用于设置返回字段名是否大小写敏感。

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

取值范围

  • 0:开启大小写敏感。默认值。
  • 1:关闭大小写敏感。

注意事项

  • 该功能仅在数据库兼容模式为MySQL时能够使用(即创建DB时DBCOMPATIBILITY='B'),在其他数据库兼容模式下不能使用该特性。

  • 支持版本:

    • Vastbase G100 V2.2 Build 10(Patch No.2)及以上补丁版本。

    • Vastbase G100 V2.2 Build 11及以上版本。

示例

1、修改数据库配置文件”postgresql.conf”中”lower_case_column_names”参数(0表示开启,1表示关闭,默认为0开启)。

lower_case_column_names=0

2、重启数据库实例。

3、创建并切换至兼容模式为MySQL的库db_mysql。

CREATE DATABASE db_mysql dbcompatibility='B';
\c db_mysql

4、创建测试表并插入数据。

create table test(id int,Home varchar);
insert into test values(1,2),(3,4);

5、查询数据库中字段名称。

select * from test;

结果返回如下,返回字段名中的大小写与建表时的写法相同:

 id | Home 
----+------  
  1 | 2  
  3 | 4
(2 rows)

6、再次向测试表插入数据,插入时指定字段名的写法大小写不敏感。

insert into test(HOme) values(5);

7、插入成功,查看测试表数据。

select * from test;

返回结果如下:

 id | Home
----+------
  1 | 2
  3 | 4
    | 5
(3 rows)

func_colname_with_args

参数说明

该参数用于控制函数返回结果的列名是否带参数列表,即返回结果的字段名称与查询语句中一致。

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

注意事项

该功能在数据库兼容模式为Oracle或者MySQL时能够使用(即创建DB时DBCOMPATIBILITY='A'或者'B'),在其他数据库兼容模式下不能使用该特性。

取值范围:布尔型

  • on:函数返回结果带参数。
  • off:函数返回结果不带参数。

默认值:off

示例

1、创建并切换至兼容模式为B的数据库。

CREATE DATABASE db_mysql DBCOMPATIBILITY 'B';
\c db_mysql

2、设置func_colname_with_args参数。

set func_colname_with_args=on;

3、执行函数查询。

select to_char(123) from dual;

返回结果为:

 to_char(123)
------------
 123
(1 row)

vastbase_sql_mode

参数说明

Vastbase在MySQL兼容模式下,支持使用GUC参数vastbase_sql_mode控制B兼容下的语法校验规则。

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

注意事项

  • 该功能仅在数据库兼容模式为MySQL时能够使用(即创建DB时DBCOMPATIBILITY='B'),在其他数据库兼容模式下不能使用该特性。
  • 从V2.2 Build 10(Patch No.2)开始,仅在MySQL兼容模式下校验此参数。在其他兼容模式下修改此参数值并不会报错,但修改不会生效。

取值范围

字符串,仅允许合法字符串设定。参数值由若干个配置项用逗号隔开构成。

  • 当前仅支持表1中的内容。

  • 同时配置多个选项时,相邻配置项用逗号隔开,例如:set vastbase_sql_mode='only_full_group_by,sql_mode_strict';

  • 若将此参数取值设为空字符串'',则表示不启用任何相关特性。

表1 vastbase_sql_mode取值范围

取值 说明 用法参考 数据库支持版本
ONLY_FULL_GROUP_BY 用于限制以下两种场景:
  • 出现在select列表中的列,一定要出现在group by子句中。
  • 出现在order by中的列,一定要出现在select distinct中。
  • SELECT V2.2 Build 10及以上版本
    SQL_MODE_STRICT 在为字段设置UNSIGNED属性后,限制插入的列值正负和长度。
    (涉及的类型有tinyint、smallint、int、integer、bigint、mediumint)
    COLUMN定义支持UNSIGNED属性 V2.2 Build 10(Patch No.9)及以上补丁版本
    ANSI_QUOTES 控制双引号引用的内容被解释为标识符还是字符串。 双引号解释为标识符
  • V2.2 Build 10(Patch No.11)及以上补丁版本
  • V2.2 Build 11及以上版本
  • pad_char_to_full_length 控制char类型查询时是否删除尾部空格。
  • 当pad_char_to_full_length打开,就表示char类型查询时尾部空格不会被删除。
  • 当pad_char_to_full_length关闭,就表示char类型查询时尾部空格会被删除。
  • - V2.2 Build 10(Patch No.16)及以上补丁版本
    error_for_division_by_zero 用于控制MySQL兼容模式下除以0时是否提示Warning信息。
    设置此选项时,表达式中除以0的操作将提示 WARNING: division by zero
    - V2.2 Build 10(Patch No.17)及以上补丁版本

    默认值

    only_full_group_by,ansi_quotes,pad_char_to_full_length,error_for_division_by_zero

    实际默认值与当前数据库的补丁版本有关,请关注表1中介绍的数据库版本支持情况。

    示例

    示例请参考表1中的“用法参考”。

    lower_case_table_names

    参数说明

    在MySQL兼容模式下,lower_case_table_names参数用于控制数据库返回对象名的大小写敏感性,对象包含schema名、表名、用户名、函数名等数据库对象名称。

    • 该功能仅在数据库兼容模式为MySQL时支持(即数据库实例初始化时指定DBCOMPATIBILITY='B')。
    • 在Vastbase G100 V2.2 Build 10(Patch No.9)及以后版本支持使用该参数控制对象名大小写敏感性,该参数仅支持在创建数据库时指定,数据库创建成功后不支持修改,从V2.2 Build 10(Patch No.15)补丁版本开始该参数支持修改。
    • 在配置文件$PGDATA/postgresql.conf中修改lower_case_table_names参数取值后应重启数据库,使修改生效。
    • 在主备集群的环境中,主备节点的lower_case_table_names参数的设置必须相同。
    • lower_case_table_names参数为0时,\df查看函数信息,函数名大小写敏感。

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

    • 若数据库中对象名大小写敏感(lower_case_table_names参数是0)情况下,存在不同对象名AA、Aa和aa,当修改参数设置对象名大小写不敏感(lower_case_table_names=1),则此时大小写敏感的对象AA和Aa将无法被识别。后续必须要重建这些对象,可参见示例3

    • 若要实现对象名大小写不敏感,则应在创建对象前指定参数取值为1。创建数据库、创建表之前(以及使用vb_dump和vb_dumpall -F p模式导出的SQL语句中包含有创建数据库和表的情况),必须先在实例级别指定参数lower_case_table_names=1,并确保参数已生效,确保后续创建的数据库和表的大小写不敏感。

    • 执行导出和导入操作之前,应确定前后的数据库大小写敏感的设置一致。若vb_dump导出的数据库对象名大小写不敏感,在使用vb_restore命令导入数据之前必须在导入实例指定lower_case_table_names=1,且确认生效,确保导出和导入前后的数据库大小写敏感的设置一致。

    取值范围

    • 0:对象名使用创建时的大小写样式保存,在比较判断时使用大小写敏感的方式。

    • 1:对象名统一使用小写样式保存,在比较判断时使用大小写不敏感的方式。

    默认值:0

    示例

    示例1: 设置表名大小写敏感。

    1、在配置文件$PGDATA/postgresql.conf中修改lower_case_table_names参数设置为0,即大小写敏感。并重启数据库。

    vi $PGDATA/postgresql.conf
    lower_case_table_names=0;
    
    vb_ctl restart
    

    2、连接数据库查看当前数据库下参数lower_case_table_names的值。

    show lower_case_table_names;
    

    返回结果为:

     lower_case_table_names
    ------------------------
     0
    (1 row)
    

    3、创建测试表table2。

    CREATE TABLE table2
    ( 
      id   INTEGER, 
     name  varchar(20)
    );
    

    4、向表TABLE2中插入数据。

    INSERT INTO TABLE2(id,name) VALUES (2, 'grace');
    

    插入失败,返回结果如下。

    ERROR:  relation "TABLE2" does not exist on node1
    

    示例2: 设置表名大小写不敏感。

    1、在配置文件$PGDATA/postgresql.conf中修改lower_case_table_names参数设置为1,即大小写不敏感。并重启数据库。

    vi $PGDATA/postgresql.conf
    lower_case_table_names=1
    
    vb_ctl restart
    

    2、连接数据库查看当前数据库下参数lower_case_table_names的值。

    show lower_case_table_names;
    

    返回结果为:

     lower_case_table_names
    ------------------------
     1
    (1 row)
    

    3、创建测试表table1。

    CREATE TABLE table1
    ( 
      id    INTEGER, 
     name   varchar(20)
    );  
    

    4、向表TABLE1中插入数据。

    INSERT INTO TABLE1(id,name) VALUES(1, 'jack');
    

    5、查看表TABLE1内容。

    select * from TABLE1;
    

    返回结果如下,表示数据插入成功,该数据库大小写不敏感。

     id | name
    ----+------
      1 | jack
    (1 row)
    

    示例3: 创建表后切换lower_case_table_names参数取值。

    1、在配置文件$PGDATA/postgresql.conf中修改lower_case_table_names参数设置为0,即大小写敏感。并重启数据库。

    vi $PGDATA/postgresql.conf
    lower_case_table_names=0
    
    vb_ctl restart
    

    2、查看当前数据库下参数lower_case_table_names的值。

    show lower_case_table_names;
    

    返回结果为:

     lower_case_table_names
    ------------------------
     0
    (1 row)
    

    3、创建大小写不同形式的测试表并为其插入数据,并查看当前参数取值下查询表数据的实际结果。

    create table test_1174016(col int);
    create table tesT_1174016(col int);
    create table TEST_1174016(col int);
    insert into test_1174016 values(0);
    insert into tesT_1174016 values(1);
    insert into TEST_1174016 values(2);
    
    select * from test_1174016;
    select * from tesT_1174016 ;
    select * from TEST_1174016 ;
    

    返回结果依次为如下:

     col
    -----
       0
    (1 row)
    
     col
    -----
       1
    (1 row)
    
     col
    -----
       2
    (1 row)
    

    4、在配置文件$PGDATA/postgresql.conf中修改lower_case_table_names参数设置为1,即大小写不敏感。并重启数据库。

    vi $PGDATA/postgresql.conf
    lower_case_table_names=1
    
    vb_ctl restart
    

    5、查看当前数据库下参数lower_case_table_names的值。

    show lower_case_table_names;
    

    返回结果为:

     lower_case_table_names
    ------------------------
     1
    (1 row)
    

    6、查询测试表数据。

    lower_case_table_names=0时创建的大小写敏感的table,在其参数取值被修改为1(即对象名大小写不敏感)之后,仅对象名为全小写的table可以被识别,其余将无法被识别。

    select * from test_1174016;
    select * from tesT_1174016 ;
    select * from TEST_1174016 ;
    

    返回结果依次为如下,即在大小写不敏感的情况下,以上语句的查询对象均为test_1174016测试表:

     col
    -----
       0
    (1 row)
    
     col
    -----
       0
    (1 row)
    
     col
    -----
       0
    (1 row)
    

    7、删除后重新创建测试表并插入数据,查询测试表数据。

    drop table TEST_1174016;
    create table TEST_1174016(col int);
    insert into TEST_1174016 values(3);
    
    select * from test_1174016;
    select * from tesT_1174016 ;
    select * from TEST_1174016 ;
    

    返回结果为如下,由于查询对象名大小写不敏感,所以上述查询语句的查询的对象均为步骤7中创建的测试表test_1174016。

     col
    -----
       3
    (1 row)
    
     col
    -----
       3
    (1 row)
    
     col
    -----
       3
    (1 row)
    

    8、恢复对象名大小写敏感。在配置文件$PGDATA/postgresql.conf中修改lower_case_table_names参数设置为0。并重启数据库。

    vi $PGDATA/postgresql.conf
    lower_case_table_names=0
    
    vb_ctl restart
    

    9、查看当前数据库下参数lower_case_table_names的值。

    show lower_case_table_names;
    

    返回结果为:

     lower_case_table_names
    ------------------------
     0
    (1 row)
    

    10、查询测试表数据。

    select * from test_1174016;
    select * from tesT_1174016 ;
    select * from TEST_1174016 ;
    

    返回结果为如下,在步骤3中创建的大小写敏感的测试表可以被查询到,且test_1174016表查询结果为重建后的数据:

     col
    -----
       3
    (1 row)
    
     col
    -----
       1
    (1 row)
    
     col
    -----
       2
    (1 row)
    

    b_compatibility_user_host_auth

    参数说明: 控制是否允许创建user@host'user'@'host'之类的用户并兼容MySQL的user@host认证鉴权。对兼容MySQL的user@host进行认证时,需要在配置文件postgresql.conf中设为on。

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

    • MySQL在创建用户时会将用户名与主机名拼接成新的用户名,即user一致时,不同的host将被记录为多个用户。该参数与MySQL行为一致。

    • 当b_compatibility_user_host_auth与b_compatibility_user_host_ignore同时为on时,生效参数为b_compatibility_user_host_ignore。

    • 本参数仅在V2.2 Build 10 (Patch No.17)及以后版本支持。

    取值范围: 布尔型

    • on:开启该参数允许创建user@host'user'@'host'之类的用户并兼容MySQL的user@host认证鉴权。

    • off:关闭该参数不允许创建user@host'user'@'host'之类的用户并且不支持user@host认证鉴权。

    默认值: off

    b_compatibility_user_host_ignore

    参数说明: 控制是否允许创建user@host'user'@'host'之类的用户,该参数不对@host进行认证鉴权,user@host等同于user。

    • 如需对用户IP进行认证鉴权,可在pg_hba.conf中配置。

    • 本参数仅在V2.2 Build 10 (Patch No.17)及以后版本支持。

    取值范围: 布尔型

    • on:开启该参数允许创建user@host'user'@'host'之类的用户,并忽略对@host进行认证鉴权,user@host等同于user。

    • off:关闭该参数不允许创建user@host'user'@'host'之类的用户。

    默认值: off

    b_format_behavior_compat_options

    参数说明: 数据库B模式兼容性行为配置项,该参数的值由若干个配置项用逗号隔开构成。

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

    取值范围: 字符串

    默认值: “”

    • 该参数仅在数据库兼容模式为MySQL时生效(即数据库实例初始化时指定DBCOMPATIBILITY='B')。
    • 该参数属于会话级别参数,必须在配置文件设置或者session级别设置才会生效。
    • 配置多个兼容性配置项时,相邻配置项用逗号隔开,例如:set b_format_behavior_compat_options='enable_set_variables,set_session_transaction';

    当前只支持下表所示的兼容性B模式配置项。

    兼容性配置项 兼容性行为控制
    enable_set_variables set语法增强控制开关。
  • 不设置此配置时,不支持set自定义变量、set [global | session]语法。
  • 设置此配置时,支持B兼容模式下使用上述语法,比如set @v1 = 1;
  • set_session_transaction set session transaction控制开关。
  • 不设置此配置时,set session transaction等效于set local transaction
  • 设置此配置时,支持B兼容模式下使用上述语法,修改当前会话事务特性。
  • enable_modify_column ALTER TABLE MODIFY语义控制开关。
  • 不设置此配置时,ALTER TABLE table_name MODIFY column_name data_type;只修改列的数据类型。
  • 设置此配置时,ALTER TABLE table_name MODIFY column_name data_type;修改整个列定义。
  • default_collation 默认字符序前向兼容开关。
  • 不设置此配置时,在未显式指定字符类型字段的字符集或字符序且表级字符序也为空时,字段为default字符序。
  • 设置此配置时,字符类型字段的字符序当表级字符序不为空时继承表级字符序,为空时设置为数据库编码对应的默认字符序。
  • fetch FETCH语句结尾报错兼容开关。
  • 不设置此配置时,FETCH抓取完了所有可用行,它就停在最后一行后面,或者在反向抓取的情况下是停在第一行前面。
  • 设置此配置时,FETCH抓取完了所有可用行后报错。
  • enable_multi_charset 多字符集功能的控制开关。
  • 不设置此配置时,不允许不同于数据库字符集的数据,不处理不同于数据库字符集的表达式。
  • 设置此配置时,允许数据库中含有不同于数据库字符集的数据,合并不同字符集的表达式。不同字符集的表达式运算规则详见:字符集与字符序。
  • 说明:目前Vastbase暂不支持字符集的合并功能,不表示多字符集功能的控制开关,目前该参数开启只是为了可以设置collation_connection。
    b_format_escape V2.2 Build 10(Patch No.17)及以上版本支持选项b_format_escape,用来控制逃逸字符在MySQL兼容模式中的表现。
  • 开启该选项时,逃逸字符为反斜线时需要双写,与MySQL表现保持一致。
  • 关闭该选项时,表示使用standard_conforming_strings控制逃逸字符,与历史版本一致,参数设置为on时,逃逸字符为反斜线不用双写;参数设置为off时,在文串常量中写的任何反斜线都需要被双写。