Linux环境下,不是windows平台下。区别很大。注意。
一图胜千言 mysql> show create table Ac;+-------+-------------------------------------------------------------------------------------------------------------------------+| Table | Create Table |+-------+-------------------------------------------------------------------------------------------------------------------------+| Ac | CREATE TABLE `Ac` ( `a` varchar(20) DEFAULT NULL, `c` varchar(20) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8 |+-------+-------------------------------------------------------------------------------------------------------------------------+1 row in set (0.00 sec) mysql>mysql> insert into Ac values ('1q','1q');Query OK, 1 row affected (0.00 sec) mysql> insert into Ac values ('1Q','1Q');Query OK, 1 row affected (0.00 sec) mysql> select * from Ac WHERE a='1q';+------+------+| a | c |+------+------+| 1q | 1q || 1Q | 1Q |+------+------+2 rows in set (0.00 sec) mysql> select * from AC ;ERROR 1146 (42S02): Table 'test.AC' doesn't existmysql> select * from Ac where A='1Q';+------+------+| a | c |+------+------+| 1q | 1q || 1Q | 1Q |+------+------+2 rows in set (0.00 sec) 如上的结果能反应说明以下结论。 MySQL在Linux下数据库名、表名、列名、别名大小写规则是这样的: 1、数据库名与表名是严格区分大小写的; 2、表的别名是严格区分大小写的; 3、列名与列的别名在所有的情况下均是忽略大小写的; 4、字段内容默认情况下是大小写不敏感的。 mysql中控制数据库名和表名的大小写敏感由参数lower_case_table_names控制,为0时表示区分大小写,为1时,表示将名字转化为小写后存储,不区分大小写。mysql> show variables like '%case%';+------------------------+-------+| Variable_name | Value |+------------------------+-------+| lower_case_file_system | OFF || lower_case_table_names | 0 |+------------------------+-------+2 rows in set (0.00 sec) 修改cnf配置文件或者编译的时候,需要重启服务。 MySQL存储的字段是不区分大小写的。这个有点不可思议。尤其是在用户注册的业务时候,会出现笑话。所以还是严格限制大小写敏感比如好。 如何避免字段内容区分大小写。就是要新增字段的校验规则。可以看出默认情况下字段内容是不区分大小写的。大小写不敏感。 mysql> create table aa (a varchar(20) BINARY , c varchar(20)) ;Query OK, 0 rows affected (0.10 sec) mysql> show create table aa;+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+| Table | Create Table |+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+| aa | CREATE TABLE `aa` ( `a` varchar(20) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, `c` varchar(20) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8 |+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+1 row in set (0.00 sec) mysql> select * from aa;+------+------+| a | c |+------+------+| a | C || a | C || A | c |+------+------+3 rows in set (0.00 sec) mysql> select * from aa where a = 'a';+------+------+| a | c |+------+------+| a | C || a | C |+------+------+2 rows in set (0.00 sec) mysql> select * from aa where a = 'A';+------+------+| a | c |+------+------+| A | c |+------+------+1 row in set (0.00 sec) 原因如下: 字段值的大小写由mysql的校对规则来控制。提到校对规则,就不得不说字符集。字符集是一套符号和编码,校对规则是在字符集内用于比较字符的一套规则 . 一般而言,校对规则以其相关的字符集名开始,通常包括一个语言名,并且以_ci(大小写不敏感)、_cs(大小写敏感)或_bin(二元)结束 。比如 utf8字符集,utf8_general_ci,表示不区分大小写,这个是utf8字符集默认的校对规则;utf8_general_cs表示区分大小写,utf8_bin表示二进制比较,同样也区分大小写 。 作者原文地址: http://www.cnblogs.com/wzmenjoy/p/4244545.html【转】MYSQL大小写问题
经常遇到的问题,一些不是特别重要但是又比较郁闷的事情。例如今天这个MySQL大小写敏感。
先上测试结果。