開發環境 Windows(不區分大小寫)程式碼部署至 Linux 生產環境(預設區分大小寫)後,報錯「Table doesn't exist」,實際表名存在但大小寫不匹配。
| 對象 | 大小寫敏感度 |
|---|---|
| 資料庫名 / 表名 | **嚴格區分** |
| 表別名 | **嚴格區分** |
| 列名 / 列別名 | **不區分**(所有情況) |
| 變量名 | **嚴格區分** |
/etc/my.cnf(或 /etc/mysql/my.cnf),在 [mysqld] 區段新增:lower_case_table_names=1systemctl restart mysqld 或 service mysql restart0(Linux 預設):**區分大小寫**,表名按建立時大小寫存儲於磁盤,查詢需精確匹配。1:**不區分大小寫**,表名以小寫存儲於磁盤,查詢自動轉小寫比對(Windows 行為)。2:表名按建立時大小寫存儲,但查詢轉小寫比對(罕用,易引發不一致)。lower_case_table_names=1 並重新匯入數據,主從複制場景需主從參數一致,否則複制中斷。lower_case_table_names 需重啟且**要求數據目錄遷移/重建**,現有表名大小寫可能導致無法啟動或查詢異常,生產環境極謹慎變更。lower_case_table_names=1,與生產環境行為一致,提前暴露問題。SHOW VARIABLES LIKE 'lower_case_table_names'; # Value = 1 表示已生效