问题是这样来的,William导入一个项目后,连接局域网内另一台电脑的Mysql,死活连不上。控制台报错信息提示将Mysql连接驱动改为新的 com.mysql.cj.driver,但是改了之后没啥用,然后使用IDEA自带的连接Mysql试一下,就是页面右侧的Database,也是连接不上,有个提示说是返回的时区有问题,那就是因为mysql数据库时区问题导致无法连接呗。
没改之前的报错信息:
Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
2021-10-12 08:50:25.884 ERROR 43878 --- [ restartedMain] o.a.t.j.p.ConnectionPool : Unable to create initial connections of pool.
java.sql.SQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up.
解决Mysql时区问题有好几个方法,William选择的是修改JDBC的连接,加了个时区设置 serverTimezone=Asia/Shanghai
,最后设置为:
jdbc:mysql://localhost:3306/数据库名?serverTimezone=Asia/Shanghai&autoReconnect=true&useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&useSSL=false
查Mysql的时区
执行下面的代码可以进行查询
select timediff(now(),convert_tz(now(),@@session.time_zone,'+00:00'));
或者
SELECT TIMEDIFF(NOW(), UTC_TIMESTAMP);
或者
show variables like '%time_zone%';
如果是中国标准时间, 会输出 08:00
动态修改时区
set global time_zone = '+8:00'; ##修改mysql全局时区为北京时间,即我们所在的东8区
set time_zone = '+8:00'; ##修改当前会话时区
flush privileges; #立即生效
在jdbc url指定默认时区
还有一种是在jdbc连接的url后面加上 serverTimezone=UTC
或 GMT
即可,如果指定使用 gmt+8
时区,需要写成 GMT%2B8
,否则可能报解析为空的错误。示例如下:
jdbc:mysql://localhost:3306/demo?serverTimezone=UTC&characterEncoding=utf-8
jdbc.url=jdbc:mysql://localhost:3306/demo?serverTimezone=GMT%2B8&characterEncoding=utf-8
jdbc.url=jdbc:mysql://localhost:3306/demo?serverTimezone=Asia/Shanghai&characterEncoding=utf-8
就是增加了 serverTimezone=UTC
serverTimezone=GMT%2B8
更推荐使用 serverTimezone=Asia/Shanghai
多余的话
如果 pom.xml 中 mysql connector的版本没有切换到高版本,比如 8.0.16,就算在application.xml中修改了mysql的驱动为 com.mysql.cj.driver,控制台还是会有红色提示的,也是提示你
Loading class 'com.mysql.jdbc.Driver'. This is deprecated. The new driver class is 'com.mysql.cj.jdbc.Driver'
但这时候是不影响运行跟数据库连接的,有代码洁癖的可以修改一下。
评论 (0)