小結:
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')
錯誤**: 1062
duplicate 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
mysql限制大小寫 mysql對大小寫的限制問題
今天研發人員問我,mysql對大小寫有限制嗎?我想都沒想,說沒限制。過了一會兒,研發人員告訴我說linux下是有限制的。我頓時有種打自己臉的感覺。對於自己不確定的問題,一定得想清楚,查明白了再說。在windows和mac os中,lower case tables name的預設值是1.如果只是在乙...
mysql 大寫 小寫 MySQL大小寫問題
最近在將乙個windows的mysql資料庫轉到linux上時,碰到表找不到問題,具體分析了下後發現原來是大小寫問題。在 mysql 中,資料庫和表對就於那些目錄下的目錄和檔案。因而,作業系統的敏感性決定資料庫和表命名的大小寫敏感。這就意味著資料庫和表名在 windows 中是大小寫不敏感的,而在大...
mysql 區分大小寫 大小寫敏感 配置
linux下mysql預設區分大小寫 windows下mysql預設不區分大小寫 檢視是否區分大小寫 lower case table names引數詳解 lower case table names 0 其中 0 區分大小寫,1 不區分大小寫 mysql在linux下資料庫名 表名 列名 別名大小...