| 物件 | Linux (預設) | Windows |
|---|---|---|
| 資料庫名 / 表名 | 區分大小寫 | 不區分 |
| 表別名 | 區分大小寫 | 不區分 |
| 欄位名 / 欄位別名 | 不區分 | 不區分 |
| 變數名 | 區分大小寫 | 區分 |
# 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) BINARYALTER TABLE t MODIFY col VARCHAR(50) BINARY;WHERE BINARY col = 'AbC' 或 COLLATE utf8mb4_binSHOW VARIABLES LIKE 'lower_case_table_names';
-- 結果應為 1
CREATE TABLE TestCase (id INT);
SHOW TABLES; -- 應顯示 testcase (小寫)
lower_case_table_names=1 雙重保險。