MySQL 表名大小寫敏感性由 lower_case_table_names 控制,Windows 默認 1(不敏感)、Linux 默認 0(敏感),跨平台遷移、開發生產環境不一致極易導致「表不存在」報錯。本文給出統一配置標準。
一、 參數含義
| 值 | 行為 | 適用場景 |
| 0 | 按給定大小寫存儲、比較敏感 | Linux 生產、區分大小寫業務 |
| 1 | 存儲為小寫、比較不敏感 | Windows、跨平台兼容、團隊習慣小寫 |
| 2 | 按給定大小寫存儲、比較轉小寫 | 極少用,兼容舊應用 |
二、 修改方法
Windows (my.ini)
[mysqld]
lower_case_table_names=1
# 重啟服務生效
net stop mysql & net start mysql
Linux (/etc/my.cnf 或 /etc/mysql/my.cnf)
[mysqld]
lower_case_table_names=1 # 推薦統一為 1,避免大小寫坑
# 重啟
systemctl restart mysqld
# 或
/etc/init.d/mysql restart
⚠️ 若 /etc/my.cnf 不存在,從 /usr/share/mysql/my-*.cnf 複製一份:
cp /usr/share/mysql/my-small.cnf /etc/my.cnf
三、 避坑指南
- 初始化前設置:
lower_case_table_names 必須在 mysqld --initialize 前生效,否則已建表的 .frm/.ibd 文件名大小寫已固化,修改參數會導致無法訪問舊表。
- 開發/測試/生產統一:團隊約定「全部小寫表名、列名」,配置
=1,消除跨環境大小寫差異。
- 遷移檢查:Linux → Windows 遷移前,用
SELECT TABLE_NAME FROM information_schema.TABLES 掃描大寫表名,必要時 RENAME TABLE 統一小寫。
- InnoDB 表空間文件名:
innodb_file_per_table=ON 時,.ibd 文件名跟隨表名大小寫,參數修改後需重建表空間。
四、 驗證
SHOW VARIABLES LIKE 'lower_case_table_names';
CREATE TABLE `TestCase` (id INT);
SHOW TABLES LIKE 'testcase'; -- 若返回行,說明不敏感生效
DROP TABLE `TestCase`;
統一 lower_case_table_names=1、約定小寫命名,是跨平台 MySQL 專案的基石配置。
- 上一篇文章: MySQL 聯合索引 vs 單列索引實測:為什麼有時單列更有效、索引列選擇決定成敗
- 下一篇文章: Linux MySQL ERROR 2002 (HY000) 解決:權限修復 + 服務重啟 + 密碼初始化
Copyright ©
程式碼之家 All Rights Reserved