在MySQL中,数据库、表、triggers实际上都对应了datadir目录(或子目录)下的文件,因此,这些对象的名字是否大小写敏感主要是依赖于操作系统和文件系统的,因此这些内容在Windows中是大小写是不敏感的,而在大多数类Unix系统中是敏感的(Mac OS X除外),当然对于建立在这些类Unix系统上的MySQL,敏感性可以在一定程度上通过参数的修改来设定。

1、column(包括别名)、 index、routine和 event names在所有平台上大小写都是不敏感的;

2、logfile groups名称在所有平台上都是大小写敏感的;

3、database、table(包括别名)的大小写敏感性可以通过系统参数lower_case_table_names来配置(修改参数的值需要重启数据库);

lower_case_table_names =0(Unix default):大小写敏感,数据按照CREATE 语句中的定义存储在磁盘,且在查询的时候是区分大小写的;

注意:不要在大小写不敏感的系统上使用此设置,因为容易导致像MyISAM引擎表的索引崩溃;

lower_case_table_names =1(Windows default):大小写不敏感,MySQL将数据全部转化为小写形式存储在磁盘上,而且在查询的时候也是全部转化为小写进行比较;

lower_case_table_names =2(MAC OS X default):大小写不敏感,大多数引擎是将数据按照CREATE 语句中的定义存储在磁盘上(Innodb是小写存储),但是在查询的时候全部转化为小写进行比较;这种设置仅适用于大小写不敏感的操作系统;

4、trigger  identifiers的大小写敏感性不受lower_case_table_names参数影响,在Windows和MAC OS X上是不敏感的,在其他类Unix系统上是不敏感的;

5、数据敏感性:由Mysql的校对字符集规则来控制(Collation),默认大小写不敏感;

每一个字符型column都有一个“字符集属性(character set)”和一个“校对集属性(collation set)”,其中character set影响列的存储编码,collation影响列数据的排序规则(或者说比较规则);

可以通过“show collation”命令查看当前版本DB支持的所有collation,其中“_ci”代表case-insensitive大小写不敏感,“_cs”代表case-sensitive大小写敏感,“_bin”的大小写敏感依赖于character的二进制编码;

collation可以在数据库对象(server、database、table、column)的定义中指定,也可以在SQL语句中使用;可以通过“show variables like 'collation%'”查看数据库级别设置的各种collation规则,分为connection、database和server;

collation的声明需要和字符集一一对应,例如utf8_general_ci不能和latin1同时使用;

例如有如下2条记录,如果我们只想查询小写的'a'怎么办?

MySQL  root@[test]>select * from t1 where name ='a';

可以在字段name前加个binary,使其区分大小写:

MySQL root@[test]>select * from t1 where binary name ='a';+------+------+| id   | name |+------+------+|    1 | a    |+------+------+

如果不调参数,各种类型大小写敏感如下:

MYSQL轻松学

MySQL实战知识分享,帮助初学者更快熟悉MySQL,更快成长为高级MySQL DBA。