JDBC连接MySQL 8配置时区serverTimezone

时间:2022-01-29 17:13:13

JDBC的MySQL 8驱动,添加了时区属性serverTimezone的配置。

Maven配置jdbc mysql 8:

<dependency>
   <groupId>mysql</groupId>
   <artifactId>mysql-connector-java</artifactId>
   <version>8.0.22</version>
</dependency>

缺失serverTimezone配置的问题

如果没有配置jdbc的url没有配置serverTimeZone,可能会有两个问题:

  1. 报时区没有配置正确的错误
  2. 返回的时间为UTC时间,非本地化时间

报时区没有配置正确的错误

报错信息类似:

java.sql.SQLException: The server timezone value 'UTC' is unrecognized or represents
  more than one timezone. You must configure either the server or JDBC driver (via
  the serverTimezone configuration property) to use a more specifc timezone value if
  you want to utilize timezone support.

默认会使用UTC,但如果不能识别出UTC或多于一个时区,就会导致此错误。解决此错误的方法就是在jdbc的url上显式配置serverTimezone。

例如:

spring.datasource.url=jdbc:mysql://localhost:3306/db?serverTimezone=Asia/Shanghai

这里的url只说明serverTimezone,其他jdbc的url参数要自己配置。

返回的时间为UTC时间,非本地化时间

这个问题是为了提醒大家。

网上很多例子,设置serverTimezone=UTC。在国内会导致显示时间和中国时间相差8小时。

国内serverTimezone本地化配置:

serverTimezone=Asia/Shanghai