首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 資料庫與表名大小寫敏感問題跨平台解決方案

     編輯:MySQL 資料庫相關知識

根本原因

MySQL 將資料庫/表對應到檔案系統目錄/檔案。
Windows(NTFS、FAT32)大小寫不敏感 → 表名不分大小寫。
Linux/Unix(ext4、xfs 等)大小寫敏感 → 表名嚴格區分大小寫。
Mac OS X:HFS+ 預設不敏感,UFS 敏感。

實測差異

-- Windows:以下兩句等價,第二句不報錯
SELECT * FROM my_table;
SELECT * FROM MY_TABLE;

-- Linux:第二句報錯 Table 'db.MY_TABLE' doesn't exist
SELECT * FROM my_table;
SELECT * FROM MY_TABLE;

系統變數 lower_case_table_names

值行為適用場景
0儲存時保留大小寫,比較敏感Linux 預設,開發要求大小寫區分
1儲存轉小寫,比較不敏感Windows 預設,跨平台遷移、兼容舊代碼
2儲存保留大小寫,比較轉小寫極少用,特殊兼容需求

修改方法

法一:配置檔永久生效

[mysqld]
lower_case_table_names=1

重啟 MySQL。注意:若已有大寫表名,需先 RENAME TABLE OldName TO oldname; 全部轉小寫,否則啟動後找不到舊表。

法二:啟動參數臨時生效(測試用)

./mysqld_safe --lower_case_table_names=1 &

最佳實踐建議

  1. 統一命名規範:所有庫、表、欄位、索引**一律小寫**,底線分隔(snake_case)。
  2. 開發/測試/生產環境統一 lower_case_table_names 設定,避免遷移驚喜。
  3. ORM/框架配置:Hibernate hibernate.identifier.quote=true、Laravel 'strict' => false、Entity Framework 對應大小寫策略。
  4. 遷移腳本:跨平台遷移前,用 mysqldump 導出,腳本中統一 LOWER() 處理識別符。

相關細節

  • 欄位名、別名**永遠不分大小寫**(所有平台)。
  • 表別名**分大小寫**(AS a 與 AS A 不同)。
  • 觸發器、預存程序、視圖、事件名稱遵循 lower_case_table_names。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved