Linux 環境下,程式報錯「找不到表」,但 MySQL 命令列明明能查到表存在。根因:Linux 預設表名大小寫敏感 (區分 user vs User),而程式碼中表名大小寫不一致。
# 1. 編輯配置檔
vi /etc/my.cnf
# 2. 在 [mysqld] 區段新增
lower_case_table_names = 1
# 3. 重啟 MySQL 服務
/etc/init.d/mysql restart
# 或 systemctl restart mysqld
| 值 | 行為 | 適用作業系統 |
|---|---|---|
| 0 (預設 Unix/Linux) | 表名區分大小寫,儲存時保持原大小寫 | Linux、Unix、macOS (區分大小寫檔案系統) |
| 1 (預設 Windows) | 表名轉小寫儲存,查詢時不區分大小寫 | Windows、macOS (不區分大小寫檔案系統)、Linux 強制相容 |
| 2 | 表名保持原大小寫儲存,但查詢時轉小寫比對 | 特殊需求 (保留大小寫顯示但不區分查詢) |
mysqldump --all-databases > backup.sqlmysql < backup.sql (表名自動轉小寫)lower_case_table_names=1 並重建,否則大小寫不匹配導致查詢失敗user_info),避免跨平台大小寫陷阱lower_case_table_names 納入基礎設施代碼管理lower_case_table_names=1
# 檢查當前設定
SHOW VARIABLES LIKE 'lower_case_table_names';
# 測試大小寫不敏感
CREATE TABLE TestTable (id INT);
SELECT * FROM testtable; -- 應成功
SELECT * FROM TESTTABLE; -- 應成功
DROP TABLE TestTable;