Oracle 遷移 MySQL 時常遇到表名大小寫不匹配報錯。Linux 下 MySQL 預設嚴格區分資料庫名、表名、表別名、變數名大小寫,僅列名、列別名不區分。透過 lower_case_table_names=1 可統一為不敏感模式。
| 物件 | 預設行為 |
|---|---|
| 資料庫名 | 區分大小寫 |
| 表名 | 區分大小寫 |
| 表別名 | 區分大小寫 |
| 變數名 | 區分大小寫 |
| 列名 | 不區分大小寫 |
| 列別名 | 不區分大小寫 |
Windows 預設全不區分 (檔案系統特性)。
su - root
sed -i '/\[mysqld\]/a\lower_case_table_names=1' /etc/my.cnf
或手動編輯 vi /etc/my.cnf,在 [mysqld] 區段新增:
lower_case_table_names = 1
service mysqld restart
mysql -uroot -p -e "SHOW VARIABLES LIKE '%case%';" +------------------------+-------+ | Variable_name | Value | +------------------------+-------+ | lower_case_file_system | OFF | | lower_case_table_names | 1 | +------------------------+-------+
| 值 | 行為 | 適用場景 |
|---|---|---|
| 0 | 區分大小寫 (Linux 預設) | Linux 開發、區分大小寫的遷移 |
| 1 | 不區分大小寫 (存儲為小寫) | Windows 遷移、Oracle 遷移、跨平台相容 |
| 2 | 存儲保留大小寫,比較不區分 | 極少用,特定相容需求 |
1. 修改 lower_case_table_names=1 並重啟 2. 匯入 Schema (表名自動轉小寫建立) 3. 匯入 Data
Windows 下 MySQL 永遠不區分大小寫 (受限於 NTFS 檔案系統),無需配置。跨平台部署時,Linux 端統一設為 1 即可達成行為一致。