現象:程式碼中表名大寫 SELECT * FROM ABC,資料庫實際表名小寫 abc。Windows 下正常,Linux 部署後報 Table 'ABC' doesn't exist。
lower_case_table_names=1 (表名存儲為小寫、比較不區分大小寫)。lower_case_table_names=0 (表名區分大小寫、按建表時大小寫存儲)。lower_case_table_names=2 (存儲按給定大小寫、比較轉小寫)。mysql> SHOW VARIABLES LIKE 'lower_case_table_names';
+------------------------+-------+
| Variable_name | Value |
+------------------------+-------+
| lower_case_table_names | 0 |
+------------------------+-------+
# /etc/my.cnf 或 /etc/mysql/my.cnf
[mysqld]
lower_case_table_names = 1
重啟 MySQL 生效:service mysql restart (或 systemctl restart mysqld)
效果:表名統一轉小寫存儲、比較不區分大小寫,Windows/Linux 行為一致。
mysqldump --all-databases > backup.sqllower_case_table_names=1 並重啟mysql < backup.sql (表名會自動轉小寫)user_order)。SELECT * FROM \`UserOrder\` 避免保留字衝突,但不解決大小寫問題。hibernate.physical_naming_strategy、JPA @Table(name="user_order") 顯式指定小寫。| 環境 | 建議 lower_case_table_names | 命名規範 |
|---|---|---|
| 純 Linux 生產 | 1 (統一小寫) | 全部小寫 + 下劃線 |
| 跨平台開發/部署 | 1 (統一小寫) | 全部小寫 + 下劃線 |
| 僅 Windows | 1 (預設) | 可混用,但建議小寫 |
| MacOS 開發 | 2 (預設) | 全部小寫 + 下劃線 |