小結:
1.資料庫名大小寫敏感,不可參數調配
2.表名大小寫敏感(可參數調配lower_case_table_names),表別名敏感大小寫
3.列名和列的別名不敏感大小寫
4.變數名嚴格敏感大小寫,不可參數調配
5.執行目錄大小寫敏感,可參數調配(lower_case_file_system)
6.windows下表名和執行目錄名預設都不區分大小寫,Unix和linux區分大小寫
7.命名的大小寫敏感和欄位內查詢大小寫敏感不是一回事,欄位內查詢大小寫敏感通過字元集或者binary關鍵字指定,預設不區分大小寫
lower_case_table_names參數影響表名的大小寫:0表示區分大小寫,1表示不區分大小寫
lower_case_file_system參數影響mysql各種目錄的大小寫,0表示不區分大小寫,1表示區分
欄位內大小寫區分
受字元集的檢驗字元集影響,如utf8_bin,utf8_general_ci,utf8_general_cs,_bin表示用二進位儲存資料,且區分大小寫,ci表示不區分大小寫,cs表示區分大小寫(貌似該種校正字元已經被淘汰了),校正字元集可分為四種:伺服器層、資料庫層、表層、欄位層(從高往低),真正決定的因素是欄位層的檢驗字元集,如果沒有指定則預設從上一層繼承過來,如表繼承欄位的資料庫層,欄位層繼承表層,資料庫層繼承伺服器層,伺服器層則需要設定,如果不設定預設為latin1_general_ci
若指定某欄位校正字元為utf8_bin,則該欄位中a和A是不一樣的!
例子:
CREATE TABLE t_bin(vr VARCHAR(20) NOT NULL PRIMARY KEY)COLLATE=utf8_bin; CREATE TABLE t_ci(vr VARCHAR(20) NOT NULL PRIMARY KEY)COLLATE=utf8_general_ci;INSERT INTO t_bin (vr) VALUES ('a');INSERT INTO t_bin (vr) VALUES ('A');INSERT INTO t_ci (vr) VALUES ('b');INSERT INTO t_ci (vr) VALUES ('B');4 queries executed, 3 success, 1 errors, 0 warnings查詢:insert into t_bin (vr) values ('a')共 1 行受到影響執行耗時 : 0 sec傳送時間 : 0 sec總耗時 : 0 sec--------------------------------------------------查詢:INSERT INTO t_bin (vr) VALUES ('A')共 1 行受到影響執行耗時 : 0 sec傳送時間 : 0 sec總耗時 : 0 sec--------------------------------------------------查詢:INSERT INTO t_ci (vr) VALUES ('b')共 1 行受到影響執行耗時 : 0 sec傳送時間 : 0 sec總耗時 : 0 sec--------------------------------------------------查詢:INSERT INTO t_ci (vr) VALUES ('B')錯誤碼: 1062Duplicate entry 'B' for key 'PRIMARY'執行耗時 : 0 sec傳送時間 : 0 sec總耗時 : 0 sec
可以看到插入t_bin(編碼為_bin),a和A區分開來
而插入t_ci(編碼為_ci),b和B不能區分開來,如果預設某欄位上不是_bin檢驗編碼,則可以用binary關鍵字指定對大小寫敏感
如:
CREATE TABLE t_no(vr VARCHAR(20) NOT NULL )COLLATE=utf8_general_ci;INSERT INTO t_no (vr) VALUES ('a');INSERT INTO t_no (vr) VALUES ('A');INSERT INTO t_no (vr) VALUES ('b');INSERT INTO t_no (vr) VALUES ('B'); mysql> SELECT * FROM t_no WHERE vr='a';+----+| vr |+----+| a || A |+----+2 rows in set (0.00 sec)mysql> SELECT * FROM t_no WHERE binary vr='a';+----+| vr |+----+| a |+----+1 row in set (0.00 sec)
建議:一般建議表名上不區分大小寫,即將lower_case_table_names設定為1
本文出自 “原下” 部落格,請務必保留此出處http://qdjalone.blog.51cto.com/1222376/1304539