MySQL大小寫敏感總結

在MySQL中,數據庫、表、triggers實際上都對應了datadir目錄(或子目錄)下的文件,因此,這些對象的名字是否大小寫敏感主要是依賴於操作系統和文件系統的,因此這些內容在Windows中是大小寫是不敏感的,而在大多數類Unix系統中是敏感的(Mac OS X除外),當然對於建立在這些類Unix系統上的MySQL,敏感性可以在一定程度上通過參數的修改來設定。

1、column(包括別名)、 index、routine和 event names在所有平臺上大小寫都是不敏感的;

2、logfile groups名稱在所有平臺上都是大小寫敏感的;

3、database、table(包括別名)的大小寫敏感性可以通過系統參數lower_case_table_names來配置(修改參數的值需要重啓數據庫);

  1. lower_case_table_names =0(Unix default):大小寫敏感,數據按照CREATE 語句中的定義存儲在磁盤,且在查詢的時候是區分大小寫的; 注意:不要在大小寫不敏感的系統上使用此設置,因爲容易導致像MyISAM引擎表的索引崩潰;
  2. lower_case_table_names =1(Windows default):大小寫不敏感,MySQL將數據全部轉化爲小寫形式存儲在磁盤上,而且在查詢的時候也是全部轉化爲小寫進行比較;
  3. lower_case_table_names =2(MAC OS X default):大小寫不敏感,大多數引擎是將數據按照CREATE 語句中的定義存儲在磁盤上(Innodb是小寫存儲),但是在查詢的時候全部轉化爲小寫進行比較;這種設置僅適用於大小寫不敏感的操作系統;

4、trigger identifiers的大小寫敏感性不受lower_case_table_names參數影響,在Windows和MAC OS X上是不敏感的,在其他類Unix系統上是不敏感的;

5、數據敏感性:由Mysql的校對字符集規則來控制(Collation),默認大小寫不敏感;

  1. 每一個字符型column都有一個“字符集屬性(character set)”和一個“校對集屬性(collation set)”,其中character set影響列的存儲編碼,collation影響列數據的排序規則(或者說比較規則);
  2. 可以通過“show collation”命令查看當前版本DB支持的所有collation,其中“_ci”代表case-insensitive大小寫不敏感,“_cs”代表case-sensitive大小寫敏感,“_bin”的大小寫敏感依賴於character的二進制編碼;
  3. collation可以在數據庫對象(server、database、table、column)的定義中指定,也可以在SQL語句中使用;可以通過“show variables like 'collation%'”查看數據庫級別設置的各種collation規則,分爲connection、database和server;
  4. collation的聲明需要和字符集一一對應,例如utf8_general_ci不能和latin1同時使用;

例如有如下2條記錄,如果我們只想查詢小寫的'a'怎麼辦?MySQL root@[test]>select * from t1 where name ='a'; +------+------+ | id | name | +------+------+ | 1 | a | | 2 | A | +------+------+可以在字段name前加個binary,使其區分大小寫:MySQL root@[test]>select * from t1 where binary name ='a';+------+------+| id | name |+------+------+| 1 | a |+------+------+

如果不調參數,各種類型大小寫敏感如下:

類型

敏感

不敏感

database

table

index

column

value

routine

trigger

event

MYSQL輕鬆學

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章