開發環境(Windows)一切正常,部署到 Linux 服務器後報錯:
MySQL Error 1146: Table 'ABC' doesn't exist
但表明明存在,且 phpMyAdmin 用小寫 abc 可正常查詢,權限也無問題。
| 作業系統 | 文件系統 | 表名大小寫敏感度 | lower_case_table_names 默認值 |
|---|---|---|---|
| Windows | NTFS (不區分大小寫) | 不敏感 | 1 |
| Linux | ext4/xfs (區分大小寫) | 敏感 | 0 |
| macOS | APFS (默認不敏感) | 不敏感 | 2 |
MySQL 將表名映射為文件名(.frm/.ibd),Linux 下 ABC ≠ abc,故查詢 ABC 找不到對應文件。
naming_strategy=lower_case(Hibernate/JPA)或 table_prefix 統一前綴。# /etc/my.cnf 或 /etc/mysql/my.cnf
[mysqld]
lower_case_table_names = 1
關鍵步驟:
systemctl stop mysqlddatadir)systemctl start mysqldSHOW VARIABLES LIKE 'lower_case_table_names'; 應返回 1注意:
• 遷移現有庫需先 mysqldump 導出,修改配置後重建導入。
• InnoDB 表名存儲在系統表空間,直接改配置可能導致舊表不可訪問。
CREATE TABLE `abc` (...) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
配合 lower_case_table_names=1,新表自動轉小寫存儲。
mysqlcheck --check-upgrade 或自定義腳本掃描 SQL 中的大寫表名。lower_case_table_names=1,消除環境差異。細節決定成敗,跨平台部署前務必驗證大小寫敏感設置,避免上線後「表明明存在卻查不到」的低級事故。