字符串大小写不敏感
功能描述
Vastbase支持字符串大小写不敏感,该功能依赖于下列字符集实现:
字符集 | 说明 | 默认字符序 |
---|---|---|
utf8 | 针对Unicode的可变长度字符编码,字符编码长度1~4字节。 | utf8_general_ci |
utf8mb4 | 同utf8 | utf8mb4_general_ci |
- utf8_general_ci和utf8mb4_general_ci均是兼容MySQL数据库的字符排序规则,此排序规则在比较字符时,不考虑大小写,只比较字符的二进制表示。因此,它对大小写是不敏感的,例如”A”和”a”是相等的。
- Vastbase不敏感的字符序支持的范围为schema、表、列、常量级别,不能指定数据库级别。
- 常量比较为纯字符串的比较,不能包含任何列或者其他函数或运算。
该功能相关的参数:
b_format_behavior_compat_options
参数说明:数据库B模式兼容性行为配置项,该参数的值由若干个配置项用逗号隔开构成。详细介绍请参考b_format_behavior_compat_options。
该参数属于USERSET类型参数,请参考重设参数表1中对应设置方法进行设置。
取值范围:字符串
默认值: ""
设置此参数
b_format_behavior_compat_options='enable_multi_charset'
只是为了可以设置collation_connection。
collation_connection
参数说明:该参数用于指定常量字符串的排序规则。只有当参数b_format_behavior_compat_options包含选项enable_multi_charset的场景下才允许设置该参数。详细介绍请参考collation_connection。
该参数属于USERSET类型参数,请参考重设参数表1中对应设置方法进行设置。
取值范围:字符串,合法的字符序的字符串,例如 utf8_general_ci
默认值: 当前数据库字符集的默认字符序
注意事项
- 该功能仅在数据库兼容模式为MySQL时支持(即数据库实例初始化时指定DBCOMPATIBILITY='B')。
- 不敏感的字符序支持的范围为schema、表、列、常量级别,不能指定数据库级别。所以创建出来的public schema 即使打开了参数也要再次进行alter才能修改默认的排序规则。
语法格式
无。
示例
示例1:模式级别设置,同时设置字符集和字符序。
1、设置参数b_format_behavior_compat_options。
set b_format_behavior_compat_options = 'enable_multi_charset';
show b_format_behavior_compat_options;
返回结果为:
b_format_behavior_compat_options
----------------------------------
enable_multi_charset
(1 row)
2、设置参数collation_connection。
set collation_connection='utf8mb4_general_ci';
show collation_connection;
返回结果为:
collation_connection
----------------------
utf8mb4_general_ci
(1 row)
3、创建模式,设置字符集和字符序,字符集和字符序需对应。
create schema sch_1174738 charset utf8mb4 collate utf8mb4_general_ci;
4、创建测试表。
create table sch_1174738.table_1174738(id int,name nvarchar(100));
insert into sch_1174738.table_1174738 values(1,'RA123');
insert into sch_1174738.table_1174738 values(2,'ra123');
insert into sch_1174738.table_1174738 values(3,'Ra123');
insert into sch_1174738.table_1174738 values(4,'rA123');
5、查询结果。
select * from sch_1174738.table_1174738 where name='Ra123';
返回结果如下:
id | name
----+-------
1 | RA123
2 | ra123
3 | Ra123
4 | rA123
(4 rows)
示例2:常量级别设置(设置enable_multi_charset后,同时设置字符集和字符序)。
1、设置参数b_format_behavior_compat_options。
set b_format_behavior_compat_options = 'enable_multi_charset';
show b_format_behavior_compat_options;
返回结果为:
b_format_behavior_compat_options
----------------------------------
enable_multi_charset
(1 row)
2、设置参数collation_connection。
set collation_connection='utf8mb4_general_ci';
show collation_connection;
返回结果为:
collation_connection
----------------------
utf8mb4_general_ci
(1 row)
3、允许数据库中含有不同于数据库字符集的数据,合并不同字符集的表达式。
CREATE TABLE table_1174859(c1 varchar(16) character set utf8mb4 collate utf8mb4_bin);
INSERT INTO table_1174859 VALUES('STRING');
4、比较时使用utf8mb4_bin字符序,结果为false。
SELECT c1 = _utf8mb4'string' AS result FROM table_1174859;
返回结果为:
result
--------
f
(1 row)
5、比较时使用utf8mb4_general_ci字符序,结果为true。
SELECT c1 = _utf8mb4'string' COLLATE utf8mb4_general_ci AS result FROM table_1174859;
返回结果为:
result
--------
t
(1 row)
示例3:同时设置模式、表、表列字符序。
1、设置参数b_format_behavior_compat_options和collation_connection。
set b_format_behavior_compat_options to default;
set collation_connection to default;
show b_format_behavior_compat_options;
show collation_connection;
返回结果为:
b_format_behavior_compat_options
----------------------------------
(1 row)
collation_connection
----------------------
(1 row)
2、创建模式,设置模式字符序utf8_bin。
create schema sch_1175225 collate utf8_bin;
3、创建测试表table_1175225,设置表字符序utf8_general_ci、表列字符序utf8_bin,并插入数据。
UTF8是一种可变长度的编码方式,用于表示Unicode字符集中的字符。UTF-8编码中,每个字符可以由1个到4个字节组成。utf8_general_ci和utf8_bin是MySQL数据库中两种不同的字符排序规则。
utf8_general_ci:此排序规则在比较字符时,不考虑大小写,只比较字符的二进制表示。因此,它对大小写是不敏感的。在utf8_general_ci排序规则下,”A”和”a”是相等的。
utf8_bin:此排序规则在比较字符时,首先比较字母的大小写,然后比较字母的顺序。也就是说,它对大小写是敏感的。例如,在utf8_general_ci排序规则下,”A”和”a”是不相等的。
create table sch_1175225.table_1175225(id int, col1 mediumtext , col2 text collate utf8_bin) collate utf8_general_ci;
insert into sch_1175225.table_1175225 values(1,'RA123','AB');
insert into sch_1175225.table_1175225 values(2,'ra123','ab');
insert into sch_1175225.table_1175225 values(3,'Ra123','aB');
insert into sch_1175225.table_1175225 values(4,'rA123','Ab');
4、创建测试表table_1175225_2并插入数据。
create table sch_1175225.table_1175225_2(id int, col1 mediumtext , col2 text);
insert into sch_1175225.table_1175225_2 values(1,'RA123','AB');
insert into sch_1175225.table_1175225_2 values(2,'ra123','ab');
insert into sch_1175225.table_1175225_2 values(3,'Ra123','aB');
insert into sch_1175225.table_1175225_2 values(4,'rA123','Ab');
5、查询table_1175225数据,表列col2敏感。
select * from sch_1175225.table_1175225 where col2='ab';
返回结果如下:
id | col1 | col2
----+-------+------
2 | ra123 | ab
(1 row)
6、查询table_1175225数据,表列col1不敏感。
select * from sch_1175225.table_1175225 where col1='ra123';
返回结果如下:
id | col1 | col2
----+-------+------
1 | RA123 | AB
2 | ra123 | ab
3 | Ra123 | aB
4 | rA123 | Ab
(4 rows)
7、查询其他表数据,大小写均敏感。
select * from sch_1175225.table_1175225_2 where col1='ra123';
select * from sch_1175225.table_1175225_2 where col2='AB';
select * from sch_1175225.table_1175225_2 where col1='ra123' and col2='AB';
返回结果如下:
id | col1 | col2
----+-------+------
2 | ra123 | ab
(1 row)
id | col1 | col2
----+-------+------
1 | RA123 | AB
(1 row)
id | col1 | col2
----+------+------
(0 rows)