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,可能会有两个问题:
- 报时区没有配置正确的错误
- 返回的时间为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