萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

設定 MySQL 資料庫/表名不區分大小寫

背景

  • Linux/Unix:檔案系統區分大小寫 → MySQL 預設 區分 表名大小寫。
  • Windows/macOS (APFS/HFS+):檔案系統不區分大小寫 → MySQL 預設 不區分。

跨平台遷移或開發/生產環境 OS 不一致時,常因大小寫導致「Table doesn't exist」錯誤。

解決方案:修改 lower_case_table_names

步驟

  1. 以 root 編輯 /etc/my.cnf(或 /etc/mysql/my.cnf)。
  2. 在 [mysqld] 區段新增:
    lower_case_table_names = 1
  3. 重啟 MySQL:systemctl restart mysqld 或 service mysql restart。

參數值說明

值行為適用場景
0區分大小寫,按建表時大小寫存儲Linux 生產環境(預設)
1**不區分**,儲存為小寫,比較時轉小寫Windows/macOS、跨平台一致性需求
2按建表大小寫存儲,但比較時轉小寫極少用,僅特定遷移場景

注意事項與限制

  • 必須在初始化資料目錄前設定。若已有資料,直接修改會導致現有表無法存取(檔案名大小寫不匹配)。
  • 已有資料庫需遷移:
    1. 匯出 mysqldump --lower-case-table-names=1 ...
    2. 停庫、修改參數、重啟、匯入。
  • InnoDB 表名在資料字典中一律小寫,該參數主要影響 MyISAM、檔案系統層面及 SQL 解析比較。
  • 分區表、外鍵、視圖等物件名亦受影響。

驗證

SHOW VARIABLES LIKE 'lower_case_table_names';
CREATE TABLE TestCase (id INT);
SELECT * FROM testcase;  -- 應成功

總結

跨平台專案建議統一設為 1,並在初始化階段確定。若生產環境已運行,變更成本極高,請在架構設計階段即納入規劃。

copyright © 萬盛學電腦網 all rights reserved