1、字符集和校验规则对比说明
在新建数据库的时候,往往需要指定数据库的字符集,在xugu中建库时若不指定字符集则默认为gbk(和xugu.ini中的def_charset参数一致),且一旦建库完成则该库的字符集无法修改。当前xugu支持的字符集列表如下:
各列名分别对应:字符集名、校验名、最大位数、最小位数、注释。
可以看到同一个字符集可以包含有多个校验名,COLLATE_NAME值,理解为用来排序的规则,所有涉及到字符类型比较或排序的地方,都和COLLATE_NAME有关。
对比在mysql中utf8字符集存在多种COLLATION:
COLLATION | DESCRIPTION |
---|---|
utf8_general_ci | Case Insensitive,大小写不敏感,兼容性不高,性能高 |
utf8_unicode_ci | Case Insensitive,大小写不敏感 ,兼容性高,能识别处理特殊字符,性能不高 |
utf8_general_cs | Case Sensitive,大小写敏感 |
utf8_bin | BINARY,将字符用二进制数据存储,从最高位往最低位逐位比对,大小写敏感 |
xugu在关闭mysql兼容模式时,如果需要建立对象名为小写的对象,则在小写对象名上加一对双引号即可;若未加双引号,则默认转对象名为大写。
在mysql中,若建表时未指定COLLATE则默认COLLATION 为utf8mb4_general_ci,即大小写不敏感。
在xugu建utf8库默认为大小写敏感,若指定字符集为utf8_general_ci(同SYSTEM系统库),则大小写不敏感。
2、查询大小写敏感的简单示例
方式一
#方式一
select version();#5.7.37-log
CREATE TABLE test(name varchar(10));
INSERT INTO test values('a'),('A'),('Aa');
SELECT * FROM test WHERE name LIKE '%a%';
SELECT * FROM test WHERE name LIKE '%A%';
mysql默认不区分大小写,如果某字段需要区分大小写,可以在定义该字段时指定binary属性,或者也可以在查询语句中,使用binary命令强行区分大小写。
方式二
#方式二
#建表时指定表级COLLATE例如:
CREATE TABLE test_1(name varchar(10)) CHARSET=utf8 COLLATE=utf8_bin;
INSERT INTO test_1 values('a'),('A'),('Aa');
SELECT * FROM test_1 WHERE name LIKE '%a%';
SELECT * FROM test_1 WHERE name LIKE '%A%';
3、小结
在mysql中使用第一种方式建表时,即大小写不敏感;xugu暂不支持设置表级COLLATE,默认同库级字符集设置,若在xugu中想要得到和mysql相同的查询结果,则需在建库时指定字符集为utf8_general_ci。
create database db_name char set 'utf8_general_ci';