Mysql设置时区的多种解决方法

William
2021-10-12 / 0 评论 / 8 阅读 / 正在检测是否收录...

问题是这样来的,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=UTCGMT 即可,如果指定使用 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

评论 (0)

取消