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;