MySQL中校验规则的选取对数据的影响

Posted 人生不设限

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL中校验规则的选取对数据的影响相关的知识,希望对你有一定的参考价值。

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校验规则

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中校验规则的选取对数据的影响的主要内容,如果未能解决你的问题,请参考以下文章

elementUI技巧:在 el-table中校验el-input输入框

linux中校验文件完整性(md5,sha1)

请你说说MySQL的字符集与排序规则对开发有哪些影响?

spring参数校验@Validated及嵌套校验

MySQL基础操作

shell选取部分内容