VastbaseG100

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

Menu

COLLATE

功能描述

COLLATE是位于SQL语句中的可选参数,用于指定字符串排序和比较的规则,它影响的是字符的比较和排序方式,可以用来解决多语言排序的问题,根据不同的语言和排序规则来比较和排序字符串数据。

Vastbase在PostgreSQL兼容模式下通过COLLATE设置排序规则,支持如下特性:

  • 支持在创建表、创建索引、alter修改列、alter增加列时使用COLLATE子句对name类型指定排序规则。

  • 支持在类型转换时指定目标name数据类型的排序规则。

    • 在对name列执行order by操作、比较操作(如= < >等)、为name列创建索引时,相同排序规则下表现和varchar一致。

    • name类型的默认排序规则为C。

注意事项

以上特性仅在数据库兼容模式为PostgreSQL时支持(即数据库实例初始化时指定DBCOMPATIBILITY='PG')。

语法格式

  • 创建表时指定表的字符集排序规则collation:

    CREATE TABLE table_name(col_name1 data_type,col_name2 data_type...) COLLATE collation;
    
  • 创建表时指定列的字符集排序规则collation:

    CREATE TABLE table_name(col_name1 data_type,col_name2 data_type... COLLATE collation) ;
    
  • 创建index时指定索引的字符集排序规则collation:

    CREATE INDEX index_name ON table_name  COLLATE collation;
    
  • 修改表已有列的排序规则collation:

    ALTER TABLE table_name ALTER COLUMN col_name SET DATA TYPE data_type COLLATE collation;
    
  • 修改表时增加列,同时指定列的字符集排序规则collation:

    ALTER TABLE table_name ADD COLUMN col_name data_type  COLLATE collation;
    

参数说明

  • COLLATE collation

    COLLATE子句指定列的排序规则(该列必须是可排列的数据类型)。如果没有指定,则使用默认的排序规则。

    排序规则可以使用select * from pg_collation;命令从pg_collation系统表中查询,默认的排序规则为查询结果中以default开始的行。

  • table_name

    要创建或修改的表名。

  • col_name

    表中要创建或修改的字段名。

  • data_type

    字段的数据类型。

    可指定排序规则的数据类型包括name、varchar,text,bpchar,clob等。为支持范围以外的数据类型指定排序规则将不会生效。

示例

1、创建测试表时对name字段指定排序规则。

create table t_1198905 (col int,col2 name COLLATE "en_US.utf8",col3 text collate "C");
insert into t_1198905 values(1,'abc','abc');
insert into t_1198905 values(2,'ABC','ABC');
insert into t_1198905 values(3,'aBc','aBc');
insert into t_1198905 values(4,'bbc','bbc');

2、查询测试表数据。

select * from t_1198905 order by col2;

返回结果为:

 col | col2 | col3
-----+------+------
   1 | abc  | abc
   3 | aBc  | aBc
   2 | ABC  | ABC
   4 | bbc  | bbc
(4 rows)

3、为测试表新增两列,分别将排序规则设置为默认和C。

alter table t_1198905 add column col4 name;
alter table t_1198905 add column col5 text collate "C";

4、向测试表中插入数据。

insert into t_1198905 values(5,'a','a','a','a');
insert into t_1198905 values(6,'à','à','à','à');
insert into t_1198905 values(7,'A','A','A','A');

5、查询测试表数据。

select * from t_1198905 order by col2;
select * from t_1198905 order by col5;

返回结果为:

 col | col2 | col3 | col4 | col5
-----+------+------+------+------
   5 | a    | a    | a    | a
   7 | A    | A    | A    | A
   6 | à    | à    | à    | à
   1 | abc  | abc  |      |
   3 | aBc  | aBc  |      |
   2 | ABC  | ABC  |      |
   4 | bbc  | bbc  |      |
(7 rows)

 col | col2 | col3 | col4 | col5
-----+------+------+------+------
   7 | A    | A    | A    | A
   5 | a    | a    | a    | a
   6 | à    | à    | à    | à
   1 | abc  | abc  |      |
   4 | bbc  | bbc  |      |
   2 | ABC  | ABC  |      |
   3 | aBc  | aBc  |      |
(7 rows)

6、环境清理。

DROP TABLE t_1198905;