現象
windows開發環境下一切正常,部署到linux服務器上後,啓動系統報以下錯誤:
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'soc.QRTZ_LOCKS' doesn't exist
錯誤信息:找不到soc數據庫下的QRTZ_LOCKS表!但是我打開navicat看到soc庫下是存在qrtz_locks表的,而且同樣的數據庫和代碼在windows下是沒問題的。
問題
1:mysql對字段名,表名,數據庫名是敏感的;
2:但是在windows下是默認不敏感,在linux下默認是敏感的;
3:所以windows下,在代碼中訪問mysql的QRTZ_LOCKS表時,mysql可以用它的qrtz_locks表來接受sql請求;
4:但是在linux下,如果在代碼中訪問mysql的QRTZ_LOCKS表時,mysql不會用qrtz_locks表來接受sql請求,而會報找不到QRTZ_LOCKS表的錯誤。
解決方案
在windows下執行命令,查看mysql系統變量可以看到如下:
show variables like '%lower_case_table_names%';
值爲1,表示是大小寫不敏感,而linux下的mysql的此係統變量是0,表示是大小寫敏感
可以修改linux下mysql的此係統變量的值爲1,讓其大小寫不敏感就可以解決開頭說的問題了。
linux下修改大小寫敏感的系統變量
1:找到mysql的配置文件
/etc/mysql/mysql.conf.d/mysqld.cnf
2:在[mysqld]標籤下添加
lower_case_table_names=1
3:重啓mysql服務,並查看該系統變量,會發現變量值已經變爲1。