现象
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。