Linux 下 MySQL 預設區分表名大小寫(lower_case_table_names=0),Windows 預設不區分(=1)。跨平台遷移、開發環境不一致常導致「表找不到」、「建表報錯」等問題。
| 值 | 行為 | 適用 OS |
|---|---|---|
0 | 儲存按原大小寫,比較區分大小寫 | Linux/Unix 預設 |
1 | 儲存統一轉小寫,比較不區分大小寫 | Windows/macOS 預設 |
2 | 儲存按原大小寫,比較轉小寫後比較 | 極少用,不推薦 |
systemctl stop mysqldmysqldump --all-databases > backup.sql(建議)vim /etc/my.cnf,在 [mysqld] 區段加入:[mysqld] lower_case_table_names = 1
systemctl start mysqldSHOW VARIABLES LIKE 'lower_case_table_names'; → 1# 1. 導出(表名會自動轉小寫) mysqldump -u root -p --all-databases > all.sql # 2. 停止服務、修改配置、清空/備份資料目錄 systemctl stop mysqld # 編輯 my.cnf 加入 lower_case_table_names=1 mv /var/lib/mysql /var/lib/mysql.bak mkdir /var/lib/mysql && chown mysql:mysql /var/lib/mysql # 3. 初始化系統表(MySQL 5.7+) mysqld --initialize-insecure --user=mysql # 或 8.0+ mysqld --initialize-insecure --user=mysql --datadir=/var/lib/mysql # 4. 啟動、導入 systemctl start mysqld mysql -u root -p < all.sql
'prefix' => ''、Hibernate hibernate.identifier_generator_strategy 等確保生成小寫。=2 會在檔案系統保留大小寫,但比較時轉小寫,極易在備份/遷移/複製時出現不一致,官方不推薦生產使用。lower_case_table_names 是 MySQL 跨平台相容性的核心開關。統一設為 1(小寫存儲、不區分比較)並在代碼層強制小寫,是避免大小寫地獄的最佳策略。變更此參數屬於重大遷移,務必完整備份、驗證、在維護窗口執行。