標籤:name 大小寫 htm 限制 儲存 結束 rom ble log
經常遇到的問題,一些不是特別重要但是又比較鬱悶的事情。例如今天這個MySQL大小寫敏感。先上測試結果。
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大小寫問題