將應用從 Windows 遷移到 Linux 後,程序報錯:
java.sql.SQLException: Table 'xxx.TB_XXX' doesn't exist
但數據庫中明明存在表 tb_xxx(小寫)。
TB_XXX),Linux 下找不到對應的小寫文件(tb_xxx)vim /etc/my.cnf
# 或 /etc/mysql/my.cnf
[mysqld] 區段添加[mysqld]
# 1 = 不區分大小寫(表名存儲為小寫,比較時轉小寫)
# 0 = 區分大小寫(Linux 默認)
# 2 = 存儲按原大小寫,但比較轉小寫(Windows 默認)
lower_case_table_names = 1
service mysqld restart
# 或 systemctl restart mysqld
| 值 | 行為 | 適用場景 |
|---|---|---|
| 0 | 嚴格區分大小寫 | Linux 默認,區分表名大小寫 |
| 1 | **不區分大小寫(推薦遷移場景)** | 表名存儲為小寫,查詢自動轉小寫比較 |
| 2 | 存儲保持原大小寫,比較轉小寫 | Windows 默認,遷移到 Linux 可能仍有問題 |
mysqldump)lower_case_table_names=1 並重啟**hibernate.globally_quoted_identifiers=true、MyBatis 結果映射指定小寫mysql> SHOW VARIABLES LIKE 'lower_case_table_names';
+------------------------+-------+
| Variable_name | Value |
+------------------------+-------+
| lower_case_table_names | 1 |
+------------------------+-------+
mysql> SELECT * FROM TB_XXX; -- 大寫查詢
-- 應正常返回數據