問題在於 mysql 不分大小寫的特性,還沒來得及深入研究是不是和資料庫的校對設定有關,至少平常常用的「utf8_general_ci」,本身就是表示的不分大小寫(ci)。所以既使在取資料表名字的時候混用大小寫,使用 mysqldump 匯出的時候,仍然會通通被轉換成小寫。
而資料表中的欄位,根據自己觀察,在匯出的時候大小寫是被保留下來的,所以問題主要不會發生在這裡,而是在會被改成全小寫的資料表名稱。因為 MySQL 要依靠程式傳給它的名稱去找到對應的檔案,讀取資料。在 SQL 語法被寫在程式碼中,如果是以原始的資料表名稱(分大小寫)的方式撰寫,而 MySQL 卻已經將之轉換為全小寫,就會有所差異。
如果是在 Windows 這種不分大小寫的作業系統,不會出現什麼問題,因為任何大小寫的方式,通通代表同樣的檔案。但是對於 UNIX Like 的系統,則會產生「找不到資料表」的錯誤。如果不修改程式碼,想要解決這個問題的話,就需要在設定檔中(my.cnf)「[mysqld]」的部分加上…
lower_case_table_names=1
表示所有的查詢都要強制轉換成小寫後才執行。
PS. 印象中, ci = character ignore,詞性有沒有用對不清楚,但確定是這兩個單字,表示忽略大小寫差異。