mysql大小写敏感与校对规则
大家在使用mysql过程中,可能会遇到类似一下的问题:
root@chuck 07:42:00>select * from test where c1 like 'ab%';
+-----+
| c1 |
+-----+
| abc |
| ABD |
+-----+
模糊匹配 ab%,结果以AB开头的字符串也出现在结果集中,大家很自然的认为是大小写敏感的问题。那么mysql中大小写敏感是如何控制的;数据库名,表名,字段名这些字典对象以及字段值的大小敏感是如何控制的;以及校验规则与索引的关系,这是本文要讨论的内容。
mysql中控制数据库名和表名的大小写敏感由参数lower_case_table_names控制,为0时表示区分大小写,为1时,表示将名字转化为小写后存储,不区分大小写。字段名通常都是不区分大小写的,字段值呢?字段值的大小写由mysql的校对规则来控制。提到校对规则,就不得不说字符集。字符集是一套符号和编码,校对规则是在字符集内用于比较字符的一套规则,比如定义'A'<'B'这样的关系的规则。不同的字符集有多种校对规则,一般而言,校对规则以其相关的字符集名开始,通常包括一个语言名,并且以_ci(大小写不敏感)、_cs(大小写敏感)或_bin(二元)结束 。比如
utf8字符集,utf8_general_ci,表示不区分大小写,这个是utf8字符集默认的校对规则;utf8_general_cs表示区分大小写,utf8_bin表示二进制比较,同样也区分大小写。
校对规则通过关键字collate指定,比如创建数据库d1,指定字符集为utf8,校对规则为utf8_bin
CREATE DATABASE d1 DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;
通过上述语句说明数据库d1中的数据按utf8编码,并且是对大小写敏感的。有时候我们建库时,没有指定校对规则校对时字符大小写敏感,但是我们查询时,又需要对字符比较大小写敏感,就比如开篇中的例子,只想要ab打头的字符串。没关系,mysql提供了collate语法,通过指定utf8_bin校对规则即可。
root@chuck 08:19:35>select
* from test where c1 like 'ab%' collate utf8_bin;
+-----+
| c1 |
+-----+
| abc|
+-----+
这里还有另外一种方法,通过binary关键字,将串转为二进制进行比较,由于大小写字符的二进制肯定不同,因此可以认为是区分大小的一种方式。
root@chuck 07:50:35>select
* from test where binary c1 like
'ab%';
+-----+
| c1 |
+-----+
| abc |
+-----+
最后要说明一点的是校对规则与索引存储的关系。因为校对规则会用于字符串之间比较,而索引是基于比较有序排列的,因此校对规则会影响记录的索引顺序。下面举一个小例子说明:
1 |
建表 |
create table test(c1 varchar(100), primary key(c1)); |
create table test2(c1 varchar(100), primary key(c1)) collate |
2 |
初始化数据 |
insert into test(c1) values('abc'); insert into test(c1) values('ABD'); insert into test(c1) values('ZBC'); |
|
3 |
查询 |
select * from |
select * from test2; |
4 |
返回 结果集 |
| abc | |
| ABD | |
表1
从表1可以看到test和test2返回的结果集中,记录的相对顺序是不同的,因为是全表扫描,返回的记录体现了主键顺序。由于test表校验规则采用默认的utf8_general_ci,大小写不敏感,因此abc<ABC<ZBC;同理,test2采用utf8_bin,大小写敏感,因此ABD<ZBC<abc。
mysql大小写敏感与校对规则的更多相关文章
- mysql字符集和校对规则(Mysql校对集)
字符集的概念大家都清楚,校对规则很多人不了解,一般数据库开发中也用不到这个概念,mysql在这方便貌似很先进,大概介绍一下简要说明 字符集和校对规则 字符集是一套符号和编码.校对规则是在字符集内用于比 ...
- MySQL之字符集-校对规则
一.字符集(Character set) 是多个字符(英文字符,汉字字符,或者其他国家语言字符)的集合,字符集种类较多,每个字符集包含的字符个数不同. 特点: ①字符编码方式是用一个或多个字节表示字符 ...
- MySQL字符集及校对规则的理解
阅读目录:MySQL的字符集和校对规则 MySQL的字符集 MySQL与字符集 正确使用字符集 MySQL客户端与字符集 字符集编码转换原理 字符集常见处理操作 字符集的正确实践 MySQL的校对 ...
- Mysql字符集与校对规则
字符集是一套字符和编码的集合,校对规则是用于比较字符集的一套规则. 所以字符集有两部分组成字符集合和对应的编码集合.比如说,现在有这几个字符:A B a b, 假设它们对应的编码分别是00, 01, ...
- mysql中的字符集和校对规则(mysql校对集)
1.简要说明介绍 字符集和校对规则 字符集是一套符号和编码.校对规则是在字符集内用于比较字符的一套规则. MySql在collation提供较强的支持,oracel在这方面没查到相应的资料. 不同字符 ...
- MYSQL校对规则
一.前言 有时候遇到这种情况,你用一个like语句查询,查到的结果中有一些并没有包含你查询的关键词的纪录:有时候遇到这种情况,你的数据库自作聪明的大小写不敏感,让你在更新时把大小写不同的两条记录都更新 ...
- mysql中字符集和校对规则
首先,明确一下字符集和校对规则的概念: 字符集(charset):是一套符号和编码 校对规则(collation):是在字符集内用于比较字符的一套规则,比如有的规则区分大小写,有的则无视 ...
- mysql中对字符集和校对规则的认识
字符集:指符号和字符编码的集合.校对规则:比较字符编码的方式.GBK2312:主要包括简体中文字符及常用符号,对于中文字符采用双字节编码的格式,也就是说一个汉字字符在存储占两个字节.GBK:包括有中. ...
- sql分类及基本sql操作,校对规则(mysql学习笔记二)
sql针对操作对象分为不同语言 数据操作(管理)语言 DML或者将其细分为 ( 查询 DQL 管理(增,删,改) DML) 数据定义语言(对保存数据的格式进行定义) DDL 数据库控制语言(针对数 ...
随机推荐
- 谈谈一些有趣的CSS题目(三)-- 层叠顺序与堆栈上下文知多少
开本系列,讨论一些有趣的 CSS 题目,抛开实用性而言,一些题目为了拓宽一下解决问题的思路,此外,涉及一些容易忽视的 CSS 细节. 解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题中有你感觉 ...
- Windows server 2012 添加中文语言包(英文转为中文)(离线)
Windows server 2012 添加中文语言包(英文转为中文)(离线) 相关资料: 公司环境:亚马孙aws虚拟机 英文版Windows2012 中文SQL Server2012安装包,需要安装 ...
- JavaScript 对数据处理的5个API
JavaScript对数据处理包括向上取整.向下取整.四舍五入.固定精度和固定长度5种方式,分别对应ceil,floor,round,toFixed,toPrecision等5个API,本文将对这5个 ...
- 解决PHP-问题:Class 'SimpleXMLElement' not found in
1.问题 在ubuntu 16.10中,学习PHP,学习到PHP如何生成XML文件时候,碰到了这个问题: PHP Fatal error: Class 'ClassName\SimpleXMLElem ...
- Android权限管理之RxPermission解决Android 6.0 适配问题
前言: 上篇重点学习了Android 6.0的运行时权限,今天还是围绕着Android 6.0权限适配来总结学习,这里主要介绍一下我们公司解决Android 6.0权限适配的方案:RxJava+RxP ...
- [.NET] C# 知识回顾 - Event 事件
C# 知识回顾 - Event 事件 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/6060297.html 序 昨天,通过<C# 知识回顾 - ...
- java 利用ManagementFactory获取jvm,os的一些信息--转
原文地址:http://blog.csdn.net/dream_broken/article/details/49759043 想了解下某个Java项目的运行时jvm的情况,可以使用一些监控工具,比如 ...
- Angular源码分析之$compile
@(Angular) $compile,在Angular中即"编译"服务,它涉及到Angular应用的"编译"和"链接"两个阶段,根据从DO ...
- 脑洞大开之采用HTML5+SignalR2.0(.Net)实现原生Web视频
目录 对SignalR不了解的人可以直接移步下面的目录 SignalR系列目录 前言 - -,我又来了,今天废话不多说,我们直接来实现Web视频聊天. 采用的技术如下: HTML5 WebRTC Si ...
- StrategyPattern (策略模式)
/** * 策略模式 * @author TMAC-J * 根据环境的不同选择不同的策略,把策略用接口抽象出来 */ public class StrategyPattern { interface ...