2011/05/25

MySQL Case Insensitive for Table Names

MySQL 的資料庫為一目錄、資料表為數檔案,MySQL server 會依照 SQL query 去讀取指定位置的檔案,但在 Windows 底下檔名不分大小寫、Linux 底下則有分大小寫。

在 Windows 中底下二個 SQL query 的結果相同:
select * from user_Name;
select * from user_Name; -- 不分大小寫,結果同上

但若是將做資料轉移從 Windows 轉到 Linux 後,卻會因為區分大小寫而造成 dump 回去的資料與 query 到的資料表被視為不同:
create table `user_Name` ( blablabla ..... );
select * from user_name; -- 大小寫不同撈不到資料

若遇到這情況,可以在 my.ini (或 my.cnf) 的 [mysqld] 標籤後加上「lower_case_table_names」參數,讓 MySQL server 處理指令時自動處理。

= 0:資料庫與資料表名稱均區分大小寫

= 1:資料庫與資料表檔案名稱均使用小寫,SQL 語法中的資料庫與資料表名稱均轉換成小寫再做比對

= 2:建立資料庫與資料表時檔案名稱區分大小寫,查詢時轉換成小寫再做比對,僅是用於不區分大小寫的檔案系統。


參考資料:MySQL case insensitive table and column names - Cosmin's Wiki
http://cosminswiki.com/index.php/MySQL_case_insensitive_table_and_column_names

沒有留言:

張貼留言