MySQL中校验规则(collation)的选取对实际数据筛选的影响
在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中校验规则(collation)的选取对实际数据筛选的影响的更多相关文章
- SQL Server 与MySQL中排序规则与字符集相关知识的一点总结
字符集&&排序规则 字符集是针对不同语言的字符编码的集合,比如UTF-8字符集,GBK字符集,GB2312字符集等等,不同的字符集使用不同的规则给字符进行编码排序规则则是在特定字符集的 ...
- MySQL中获取天、周、月等数据
MySQL中获取天.周.月等数据 1.今天 select * from 表名 where to_days(时间字段名) = to_days(now()); 2.昨天 SELECT * FROM 表名 ...
- mysql中增加某一时间段内的时间数据(包含:时间、年、月、日、第几周、季度)
创建表dim_date: create table `dim_date` ( `year` int (20), `month` int (20), `day` int (20), `week` int ...
- mysql中参数low_case_table_name的使用?不同参数值的设置有什么影响?
需求描述: 今天一个同事问,在mysql中,默认的表名是大小写区分的吗,默认是什么设置, 如果要设置成大小写不区分的改怎么设置,是否需要进行重启.然后就进行了查询, 对于lower_case_tabl ...
- mysql中删除重复记录,并保留重复数据中的一条数据的SQL语句
正好想写一条删除重复语句并保留一条数据的SQL,网上查了一部分资料写的很详细,但还是在这里写下自己的理解,以遍后续学习 .如下: 表字段和数据: SQL语句: [sql] view plain cop ...
- mysql中把空值放在最后,有值的数据放在前面
order by column is null,column; 如果:order by column,则column中空值的数据放在最前面,有数据的放在后面
- [译] Pandas中根据列的值选取多行数据
# 选取等于某些值的行记录 用 == df.loc[df['column_name'] == some_value] # 选取某列是否是某一类型的数值 用 isin df.loc[df['column ...
- MySQL中使用replace into语句批量更新表数据
作为示例,我们在这里使用名为testdb的数据库,并且在其中创建两张一模一样的表: drop table if exists test_table_1; create table test_table ...
- pandas中根据列的值选取多行数据
# 选取等于某些值的行记录 用 == df.loc[df['column_name'] == some_value] # 选取某列是否是某一类型的数值 用 isin df.loc[df['column ...
随机推荐
- wordpress 解决文章内http链接问题
1. 登录Wordpress后台, 常规设置 > 里面把站点URL 修改成 https开头 2. 登录phpmyadmin , 执行替换链接的SQL 替换wordpress配置的链接地址 (可 ...
- Android控件使用FragmentTabHost,切换Fragment;
大部分APP的主界面都很类似,要么底部导航的,要么就是侧滑菜单,还有底部导航+侧滑菜单的:底部导航实现大概有几种方式: TabHost+Fragment RadioGroup+Fragment Fra ...
- Tcp三次挥手和四次挥手
三次握手: (1) 第一次握手:建立连接时,客户端A发送SYN包(SYN=j)到服务器B,并进入SYN_SEND状态,等待服务器B确认 (2) 第二次握手:服务器B收到SYN包,必须确认客户A的S ...
- Oracle 学习笔记(五)
--表空间,auto: 自动管理, manual: 手动管理 create tablespace tsp1 datafile 'D:\ORACLE\ORADATA\O10\tsp1.dbf' ...
- leetcode55
bool canJump(vector<int>& nums) { ]; ; i < nums.size() && reach >= i; i++) { ...
- JEECG 上传插件升级-Online
前言: 现有的uploadify上传是基于swf的,随着H5的普及,flash即将退出历史舞台,JEECG本着与时俱进的原则,将全面升级JEECG系统中的上传功能,采用新式上传插件plupload,此 ...
- shell多个脚本怎么并发执行
#!bin/bash PRONUM=10 #进程个数 tmpfile="$$.fifo" #临时生成管道文件 mkfifo $tm ...
- 使用rpm-build制作nginx的rpm包
2014-11-27 11:05:49 一.RPM包的分类 RPM有五种基本的操作功能:安装.卸载.升级.查询和验证. linux软件包分为两大类: (1)二进制类包,包括rpm安装包(一般分为i ...
- R语言-增加图例
legend()函数 > plot(rain$Tokyo,type="l",col="red", + ylim=c(0,300), + main=&quo ...
- cdnbest如何让用户访问走最近最快的线路(分组线路)
用户访问网站有时网络有互通的问题,cdnbest的分组解析可以细分线路,让用户访问自动走最优线路,线路不细分都加默认里,访问的节点是随机分配的 下面我们讲下如何设置: 比如你有电信,移动,和国外的节点 ...