先說遇到的問題:有個mysql執行個體跑了兩個庫,兩套程式。其中一個庫的表名全為大寫,另一個庫的表名全為小寫。
表名為小寫的這個庫的程式裡面寫sql語句的時候有用大寫的,運作時會提示找不到表。是以需要在my.cnf裡添加“lower_case_table_names = 1”使mysql忽略大小寫。但是加上這個之後,會導緻表名大寫的那套程式提示找不到表,而且無論用查詢語句用大寫表名還是小寫表名都提示找不到表。
最後通過“alter table 大寫表名 rename to 小寫表名”将大寫表名轉換為小寫表名才解決此問題。
遇到問題就要深究一下,mysql的大小寫敏感與否,取決于作業系統的大小寫敏感
是以在windows平台上,mysql不區分大小寫;
而在Linux平台上:
庫名和表名(以及表的别名)都是嚴格區分大小寫的;
列名不區分大小寫。
在回過頭來看上面的問題,之是以添加了忽略大小寫的參數,卻還是無法通路大寫表名的表,是因為大寫的表名在檔案系統存儲表檔案時也是大寫存儲(例如表LJK對應LJK.frm;表ljk對應ljk.frm),而mysql忽略大小寫的結果是“把sql語句裡的庫名和表名均按照小寫來處理”,這樣其實會導緻在系統層面找不到表結構和表資料檔案,是以對于大寫的表和庫,在打開“lower_case_table_names = 1”會無法通路。
本文轉自kai404 51CTO部落格,原文連結:http://blog.51cto.com/kaifly/1562010,如需轉載請自行聯系原作者