簡介
在MySQL中,資料庫對應資料目錄中的目錄,資料庫中的每個表至少對應資料庫目錄中的一個檔案(也可能是多個,取決于存儲引擎)。是以,所使用作業系統的大小寫敏感性決定了資料庫名和表名的大小寫敏感性。
在大多數Unix中資料庫名和表名對大小寫敏感,而在Windows中對大小寫不敏感。一個顯著的例外情況是Mac OS X,它基于Unix但使用預設檔案系統類型(HFS+),對大小寫不敏感。然而,Mac OS X也支援UFS卷,該卷對大小寫敏感,就像Unix一樣。
1、lower_case_file_system參數
表示目前系統檔案是否大小寫敏感,隻讀參數,無法修改。
ON 大小寫不敏感
OFF 大小寫敏感
例如在windows下檢視:
linux下檢視
2、lower_case_table_names參數
unix下lower_case_table_names預設值為 0 .Windows下預設值是 1 .Mac OS X下預設值是 2 .
參數值 | 解釋 |
使用CREATE TABLE或CREATE DATABASE語句指定的大小寫字母在硬碟上儲存表名和資料庫名。名稱比較對大小寫敏感。在大小寫不敏感的作業系統如windows或Mac OS x上我們不能将該參數設為0,如果在大小寫不敏感的檔案系統上将--lowercase-table-names強制設為0,并且使用不同的大小寫通路MyISAM表名,可能會導緻索引破壞。 | |
1 | 表名在硬碟上以小寫儲存,名稱比較對大小寫不敏感。MySQL将所有表名轉換為小寫在存儲和查找表上。該行為也适合資料庫名和表的别名。該值為Windows的預設值。 |
2 | 表名和資料庫名在硬碟上使用CREATE TABLE或CREATE DATABASE語句指定的大小寫字母進行儲存,但MySQL将它們轉換為小寫在查找表上。名稱比較對大小寫不敏感,即按照大小寫來儲存,按照小寫來比較。注釋:隻在對大小寫不敏感的檔案系統上适用! innodb表名用小寫儲存。 |
3、由大小寫敏感轉換為不敏感方法
如果原來所建立庫及表都是對大小寫敏感的,想要轉換為對大小寫不敏感,主要需要進行如下3步:
1.将資料庫資料通過mysqldump導出。
2.在my.cnf(CentOS下配置檔案是/etc/my.cnf)中更改最後添加 lower_case_tables_name = 1,
#add by LiShuo 20181226 start
lower_case_table_names=1
#add by LiShuo 20181226 end
然後重新開機mysql資料庫
service mysqld restart
3.将導出的資料導入mysql資料庫。
4 注意事項
為了避免大小寫引發的問題,一種推薦的命名規則是:在定義資料庫、表、列的時候全部采用小寫字母加下劃線的方式,不使用任何大寫字母
在任何系統中可以使用lower_case_tables_name=1。使用該選項的不利之處是當使用SHOW TABLES或SHOW DATABASES時,看不出名字原來是用大寫還是小寫。
請注意在Unix中如果以前lower_case_tables_name = 0将lower_case_tables_name設定為1之前,重新開機mysqld之前,必須先将舊的資料庫名和表名轉換為小寫。
5、字段值的大小寫敏感
字段值大小寫敏感需要設定字段排序規則為BINARY屬性為 ***_bin
sql這樣寫 :CREATE TABLE T(A VARCHAR(10) BINARY);
6、深入分析
原因如下: