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

Linux 下 MySQL 大小寫敏感度配置:lower_case_table_names 參數完整指南

     編輯:MySQL 資料庫相關知識

預設行為差異

物件Linux (預設)Windows
資料庫名 / 表名區分大小寫不區分
表別名區分大小寫不區分
欄位名 / 欄位別名不區分不區分
變數名區分大小寫區分

統一行為:修改 lower_case_table_names

# 1. 編輯配置文件
vi /etc/my.cnf

# 2. 在 [mysqld] 區段新增
lower_case_table_names = 1

# 3. 重啟服務
systemctl restart mysqld

參數取值含義

值儲存比較/查找適用場景
0 (Linux 預設)保持原大小寫敏感Linux 開發/生產,區分大小寫
1 (Windows 預設)轉小寫儲存不敏感跨平台遷移、Windows 習慣、應用無法統一大小寫
2保持原大小寫轉小寫比較極少用,儲存保留大小寫但查找不敏感

⚠ 修改參數的強制前置條件

必須先將現有所有資料庫、表名手動改為小寫,否則重啟後 MySQL 找不到原表(磁盤上仍是大寫目錄/檔案,但 MySQL 只找小寫)。

# 範例:批量重命名表為小寫 (需停服務操作檔案系統層面)
cd /var/lib/mysql/db_name
for f in *; do mv "$f" "$(echo $f | tr 'A-Z' 'a-z')"; done
# 同理處理資料庫目錄名

欄位值大小寫敏感查詢(業務層面)

參數僅影響識別符(庫/表/欄/別名),不影響數據值。若需欄位值區分大小寫:

  • 建表指定 BINARY 屬性:col VARCHAR(50) BINARY
  • 或 ALTER TABLE t MODIFY col VARCHAR(50) BINARY;
  • 查詢時用 WHERE BINARY col = 'AbC' 或 COLLATE utf8mb4_bin

驗證配置生效

SHOW VARIABLES LIKE 'lower_case_table_names';
-- 結果應為 1

CREATE TABLE TestCase (id INT);
SHOW TABLES;  -- 應顯示 testcase (小寫)

最佳實踐建議

  1. 新專案直接設 1:避免跨平台、團隊大小寫習慣不一致導致的上線故障。
  2. 代碼規範強制小寫:SQL 中庫/表/欄名全部小寫,配合 lower_case_table_names=1 雙重保險。
  3. 遷移專案謹慎修改:評估改動成本(重命名表、修改代碼、驗證),必要時保持 0 並統一代碼大小寫。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved