首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 資料庫/表名大小寫敏感度配置:Windows 與 Linux 完整指南

     編輯:MySQL 綜合教學

MySQL 資料庫/表名大小寫敏感度配置:Windows 與 Linux 完整指南

MySQL 中資料庫與表名實際對應檔案系統的目錄與檔案,因此大小寫敏感度取決於作業系統檔案系統特性:Windows 不敏感、Linux/Unix 敏感。但可透過 lower_case_table_names 參數統一行為,避免跨平台遷移、開發部署不一致導致的查詢失敗。

參數值含義

值儲存大小寫比較敏感度適用場景
0保留建表指定大小寫敏感Linux 預設,生產環境嚴格區分
1全部轉小寫儲存不敏感Windows/Mac 預設,跨平台相容性最佳
2保留建表大小寫儲存查詢轉小寫比較僅限不敏感檔案系統(Windows),InnoDB 強制為 1

Windows 配置步驟

  1. 編輯 MySQL 安裝目錄下的 my.ini。
  2. 在 [mysqld] 區段新增:lower_case_table_names=0(需敏感)或 =1(不敏感,預設)。
  3. 重啟 MySQL 服務生效。

注意:若資料目錄已有混合大小寫表名,改為 0 可能導致現有表無法存取。建議全新安裝時即設定,或先將所有表名轉小寫再改參數。

Linux 配置步驟

  1. 編輯 /etc/my.cnf(或 /etc/mysql/my.cnf)。
  2. 在 [mysqld] 區段新增:lower_case_table_names=1(建議統一不敏感)或保持預設 0。
  3. 重啟服務:systemctl restart mysqld 或 service mysql restart。

跨平台遷移最佳策略

  • 策略 A(推薦):所有環境統一設定 lower_case_table_names=1。表名一律小寫建立,查詢不區分大小寫,完全避免大小寫問題。缺點:SHOW TABLES 顯示皆為小寫,無法看出原始命名風格。
  • 策略 B:Linux 用 0,Windows 用 2。保留建表大小寫,但在 Windows 查詢必須精確大小寫。缺點:Windows 開發者易忘記大小寫導致查詢失敗。
  • InnoDB 強制要求:任何平台使用 InnoDB 表,必須設定 1(InnoDB 內部一律小寫儲存)。

Linux 實務驗證

-- 建表
CREATE TABLE Tab (id INT PRIMARY KEY);
-- 查詢測試
SELECT * FROM tab;    -- lower_case_table_names=1 成功,=0 失敗 (Table 'test.tab' doesn't exist)
SELECT * FROM Tab;    -- =0 成功
SELECT * FROM `Tab`;  -- 反引號強制精確匹配,=0 成功

欄位/別名/變數大小寫規則(不受此參數影響)

  • 欄位名、欄位別名:全部不敏感(所有平台)。
  • 表別名:敏感(Linux),不敏感(Windows)。
  • 資料庫名、表名:受 lower_case_table_names 控制。
  • 使用者變數、系統變數:敏感。
  • 字串值比較:依欄位校對規則(如 utf8mb4_general_ci 不敏感,_bin 敏感)。

欄位值大小寫敏感查詢技巧

需區分字串值大小寫時,可:

  1. 建表指定 BINARY 屬性:col VARCHAR(20) BINARY
  2. 或 ALTER TABLE t MODIFY col VARCHAR(20) BINARY;
  3. 查詢時強制:WHERE BINARY col = 'Abc' 或 WHERE col COLLATE utf8mb4_bin = 'Abc'

統一團隊規範:資料庫/表名一律小寫、蛇形命名,配合 lower_case_table_names=1,可徹底消除大小寫坑點。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved