mysql 小寫 MySQL大小寫小結

2021-10-19 18:25:56 字數 2328 閱讀 1541

小結:

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下資料庫名 表名 列名 別名大小...