天天看點

lower_case_table_names與表格名稱大小寫的問題

1 簡介

在MySQL中,資料庫對應資料目錄中的目錄。資料庫中的每個表至少對應資料庫目錄中的一個檔案(也可能是多個,取決于存儲引擎)。是以,所使用作業系統的大小寫敏感性決定了資料庫名和表名的大小寫敏感性。

在大多數Unix中資料庫名和表名對大小寫敏感,而在Windows中對大小寫不敏感。一個顯著的例外情況是Mac OS X,它基于Unix但使用預設檔案系統類型(HFS+),對大小寫不敏感。然而,Mac OS X也支援UFS卷,該卷對大小寫敏感,就像Unix一樣。

變量lower_case_file_system說明是否資料目錄所在的檔案系統對檔案名的大小寫敏感。ON說明對檔案名的大小寫不敏感,OFF表示敏感。

例如在windows下檢視:

說明windows系統對大小寫不敏感,mysql也預設設定為對大小寫不敏感。
           

2 大小寫區分規則

linux下:

資料庫名與表名是嚴格區分大小寫的;

表的别名是嚴格區分大小寫的;

列名與列的别名在所有的情況下均是忽略大小寫的;

變量名也是嚴格區分大小寫的;

windows下:

都不區分大小寫

Mac OS下(非UFS卷):

3 參數說明(lower_case_table_names)

unix下lower_case_table_names預設值為 0 .Windows下預設值是 1 .Mac OS X下預設值是 2 .

參數值                        	解釋
           

0 使用CREATE TABLE或CREATE DATABASE語句指定的大小寫字母在硬碟上儲存表名和資料庫名。名稱比較對大小寫敏感。在大小寫不敏感的作業系統如windows或Mac OS x上我們不能将該參數設為0,如果在大小寫不敏感的檔案系統上将--lowercase-table-names強制設為0,并且使用不同的大小寫通路MyISAM表名,可能會導緻索引破壞。

1 表名在硬碟上以小寫儲存,名稱比較對大小寫不敏感。MySQL将所有表名轉換為小寫在存儲和查找表上。該行為也适合資料庫名和表的别名。該值為Windows的預設值。

2 表名和資料庫名在硬碟上使用CREATE TABLE或CREATE DATABASE語句指定的大小寫字母進行儲存,但MySQL将它們轉換為小寫在查找表上。名稱比較對大小寫不敏感,即按照大小寫來儲存,按照小寫來比較。注釋:隻在對大小寫不敏感的檔案系統上适用! innodb表名用小寫儲存。

4 由大小寫敏感轉換為不敏感方法

如果原來所建立庫及表都是對大小寫敏感的,想要轉換為對大小寫不敏感,主要需要進行如下3步:

1.将資料庫資料通過mysqldump導出。

2.在my.cnf中更改lower_case_tables_name = 1,并重新開機mysql資料庫。

3.将導出的資料導入mysql資料庫。

5 注意事項

為了避免大小寫引發的問題,一種推薦的命名規則是:在定義資料庫、表、列的時候全部采用小寫字母加下劃線的方式,不使用任何大寫字母

在任何系統中可以使用lower_case_tables_name=1。使用該選項的不利之處是當使用SHOW TABLES或SHOW DATABASES時,看不出名字原來是用大寫還是小寫。

請注意在Unix中如果以前lower_case_tables_name = 0将lower_case_tables_name設定為1之前,重新開機mysqld之前,必須先将舊的資料庫名和表名轉換為小寫。

原文位址:http://blog.csdn.net/jesseyoung/article/details/40617031
部落格首頁:http://blog.csdn.net/jesseyoung