調整Mysql/MariaDB Table 名稱大小寫不敏感


MySQL 與 MaraiDB 預設對於 table 的名稱是大小寫敏感的, 也就是 case sensitive, 但最近遇到客戶要求要將表名稱設定為大小寫不敏感, 設定上十分容易, 步驟如下

注意: 請先檢查是否有任何 Table 名稱在改為小寫後會重複的 Table, 若發生衝突 MySQL 會崩潰

編輯 MySQL/MariaDB 設定檔(不同作業系統可能會在不同目錄)

sudo vim /etc/mysql/my.cnf

找到 [mysqld] 這個 section 下方加入

lower_case_table_names = 1 # 有可能沒有設定
接著重新啟動 MySQL/MariaDB 即可
sudo service mysql restart

註∶

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中的檔案(萬一改壞了,我也死定了),所以這個方案是不是可行可能還要實驗一下。

results matching ""

    No results matching ""