MySQL中校验规则(collation)的选取对实际数据筛选的影响
2017-03-14 17:48
330 查看
在mysql中存在着各种utf8编码格式,如下表:
1)utf8_bin
2)utf8_general_ci
utf8_bin将字符串中的每一个字符用二进制数据存储,区分大小写。
utf8_genera_ci不区分大小写,ci为case insensitive的缩写,即大小写不敏感。
现在假设执行如下命令:
create table test_bin (
name varchar(32) not null primary key,
age int unsigned not null
) engine = InnoDB COLLATE=utf8_bin;
以上命令能够执行成功。
create table test_ci (
name varchar(32) not null primary key,
age int unsigned not null
) engine = InnoDB COLLATE=utf8_general_ci;
以上命令能够执行成功。
insert into test_bin values('Alice', 18);
以上命令能够执行成功。
insert into test_bin values('alice', 18);
以上命令能够执行成功,因为utf8_bin是以十六进制方式存储数据,两条记录的主键不重复。
insert into test_ci values('Alice', 18);
以上命令能够执行成功。
insert into test_ci values('alice', 20);
以上命令执行失败,因为utf8_general_ci不区分大小写,两条记录的主键重复。
因为校验规则不同,所以使用两种校验规则的非唯一列相同结果的排序结果也会不同。建议使用utf8_bin校验规则
1)utf8_bin
2)utf8_general_ci
utf8_bin将字符串中的每一个字符用二进制数据存储,区分大小写。
utf8_genera_ci不区分大小写,ci为case insensitive的缩写,即大小写不敏感。
现在假设执行如下命令:
create table test_bin (
name varchar(32) not null primary key,
age int unsigned not null
) engine = InnoDB COLLATE=utf8_bin;
以上命令能够执行成功。
create table test_ci (
name varchar(32) not null primary key,
age int unsigned not null
) engine = InnoDB COLLATE=utf8_general_ci;
以上命令能够执行成功。
insert into test_bin values('Alice', 18);
以上命令能够执行成功。
insert into test_bin values('alice', 18);
以上命令能够执行成功,因为utf8_bin是以十六进制方式存储数据,两条记录的主键不重复。
insert into test_ci values('Alice', 18);
以上命令能够执行成功。
insert into test_ci values('alice', 20);
以上命令执行失败,因为utf8_general_ci不区分大小写,两条记录的主键重复。
因为校验规则不同,所以使用两种校验规则的非唯一列相同结果的排序结果也会不同。建议使用utf8_bin校验规则
mysql> select * from test_paixu_ci order by name desc; +----+------+---------+ | id | name | address | +----+------+---------+ | 1 | huzj | hunan | | 12 | huzj | hunan | | 13 | Huzj | hunan | | 14 | huzj | hunan | | 15 | Huzj | hunan | | 16 | huzj | hunan | | 17 | HuzJ | hunan | | 18 | huzj | hunan | | 19 | HUZJ | hunan | | 11 | hUzj | hunan | | 10 | hUZj | hunan | | 2 | huzJ | hunan | | 3 | huzj | hunan | | 4 | huZj | hunan | | 5 | hUzj | hunan | | 6 | huZj | hunan | | 7 | huzj | hunan | | 8 | huZj | hunan | | 9 | hUzj | hunan | | 20 | hUzj | hunan | +----+------+---------+ 20 rows in set (0.00 sec) mysql> select * from test_paixu_bin order by name desc; +----+------+---------+ | id | name | address | +----+------+---------+ | 1 | huzj | hunan | | 14 | huzj | hunan | | 16 | huzj | hunan | | 7 | huzj | hunan | | 12 | huzj | hunan | | 18 | huzj | hunan | | 3 | huzj | hunan | | 2 | huzJ | hunan | | 4 | huZj | hunan | | 8 | huZj | hunan | | 6 | huZj | hunan | | 11 | hUzj | hunan | | 9 | hUzj | hunan | | 5 | hUzj | hunan | | 20 | hUzj | hunan | | 10 | hUZj | hunan | | 13 | Huzj | hunan | | 15 | Huzj | hunan | | 17 | HuzJ | hunan | | 19 | HUZJ | hunan | +----+------+---------+ 20 rows in set (0.00 sec)
相关文章推荐
- 修改mysql数据的字符集校验规则使其区分大小写
- MySQL随机选取数据
- mysql字符集校验规则
- MySQL 中一个库中表数量是否有限制?表太多是否影响数据的性能?比如要把一张表拆成 1024 张,对于每个表的性能的影响是什么?这些影响需要考虑哪些因素?
- mysql innodb引擎 长时间使用后,数据文件远大于实际数据量,导致空间不足。
- MySQL 默认校验规则不区分大小写
- mysql字符集与校验规则的设置
- mysql的distinct用法-mysql中如何筛选出非重复的数据
- 处理字符数据--排序规则(Collation)
- SQL Server Collation介绍及其变更对数据的影响
- mysql select in 筛选出不存在的数据
- MySQL随机选取数据
- 实际测试亚马逊云,重启,停止对数据的影响
- MSComm控件五种不同校验方式对数据收发的影响
- 处理字符数据--排序规则(Collation)
- 串口MSComm 控件五种不同校验方式对数据收发的影响
- 处理字符数据--排序规则(Collation)
- 数据分布对MySQL执行计划的影响
- 复杂型数据“动态规则”校验的设计与实现
- MYSQL 随机选取几条数据