MySql 資料表、資料庫名稱區分大小寫的設定

MySql 資料表(table)、資料庫名稱(database names)區分大小寫(Case Sensitive)

參考文件: http://dev.mysql.com/doc/refman/5.0/en/identifier-case-sensitivity.html

幫客戶轉移系統到Linux卻發現Linux上的Mysql有區分table及DB name的大小寫的問題,導致原本寫的query不相容。google後發現這和mysql的設定有關係,導致mysql是區分大小寫的。

需要配合 lower_case_table_names 這個參數來調整,這個是mysqld的啟動參數,所以可以寫在 my.ini 或 my.cnf 中。
參數簡略說明

以下是針對這個參數的小翻譯(詳情請看官方文件)
lower_case_table_names = 0 (Windows預設)
資料表(table)及資料庫名稱(database names)一律用小寫存在磁碟中。比較(查詢)時是區分大小寫(case sensitive)。

lower_case_table_names = 1
資料表(table)及資料庫名稱(database names)一律用小寫存在磁碟中。比較時是不區分大小寫(case insensitive)。MySql轉換所有的資料表(table)、資料庫名稱(database names)、table aliases(這個我不知道怎麼翻譯比較好)名稱為小寫來存取。
註:所以實體檔案的名稱必須全為小寫,否則會存取不到。

lower_case_table_names = 2 (Mac OS X預設)
資料表(table)、資料庫名稱(database names)儲存時磁碟的檔案區分大小寫。但查詢比較時MySQL將查詢轉換成小寫,不是區分大小寫。但這個設定僅適用於不區分大小寫的檔案系統。

所以如果要將Case sensitive的資料庫改成case insenstive,必須把lower_case_table_names = 1 或 2 。但2只使用於Mac OS X、Windows之類不區分大小寫的系統,所以必須設定為1,但設定為1時,實體儲存資料的檔名就必須全是小寫,否則會存取不到,但這個系統在production中,所以我不敢貿然去改data中的檔案(萬一改壞了,我也死定了),所以這個方案是不是可行可能還要實驗一下。

謝謝觀賞

Ps. 因為還沒有研究得很深,所以本文中應該有些謬誤,所以如果有錯麻煩還請指正嚕。