1. 程式人生 > >mysql運維-lower_case_table_names(大小寫敏感)

mysql運維-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也預設設定為對大小寫不敏感。

    資料庫名與表名是嚴格區分大小寫的;     表的別名是嚴格區分大小寫的;     列名與列的別名在所有的情況下均是忽略大小寫的;     變數名也是嚴格區分大小寫的;    windows下:     都不區分大小寫    Mac OS下(非UFS卷):     都不區分大小寫

    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表名用小寫儲存。

    如果原來所建立庫及表都是對大小寫敏感的,想要轉換為對大小寫不敏感,主要需要進行如下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之前,必須先將舊的資料庫名和表名轉換為小寫。