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 exist mysql> 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表示二進制比較,同樣也區分大小寫 。 記錄下!