今天心血来要搞一个SpringBoot整合Mybatis的框架,在访问Controller的时候,最不想看到的报错信息出现了 ↓
java.sql.SQLException: The server time zone value '�й���ʱ��' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129) ~[mysql-connector-java-8.0.17.jar:8.0.17]
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97) ~[mysql-connector-java-8.0.17.jar:8.0.17]
......
经过测试,发现使用SpringBoot2.1.0以下的版本是不会报这个错误的!!!
接下来上网查找解决方案,发现是我的配置文件application.yml中数据库url地址的问题。
SpringBoot 2.0.1版本配置如下:
spring:
datasource:
username: root
password: root
url: jdbc:mysql://localhost:3306/sakila?useUnicode=true&characterEncoding=UTF-8
driver-class-name: com.mysql.jdbc.Driver
mybatis:
type-aliases-package: com.utry.entity
mapper-locations: classpath:mapper/*Mapper.xml
查询到的解决方案如下:(猜测估计是因为SpringBoot 2.1.x版本使用的的jdbc驱动是6.0版本以上吧)
引用连接:https://blog.csdn.net/weixin_43400357/article/details/97916822
原因是因为使用了Mysql Connector/J 6.x以上的版本,然后就报了时区的错误
遇到的问题 servertime=UTC导致时间差8个小时(
MySQL jdbc 6.0 版本以上必须配置此参数
)
解决办法:
在配置url的时候不能简单写成 :jdbc:mysql://localhost:3306/mysql
而是要写成 :jdbc:mysql://localhost:3306/mysql?serverTimezone=UTC
spring:
datasource:
username: root
password: root
url: jdbc:mysql://localhost:3306/sakila?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
driver-class-name: com.mysql.cj.jdbc.Driver
mybatis:
type-aliases-package: com.utry.entity
mapper-locations: classpath:mapper/*Mapper.xml
虽然上面加上时区程序不出错了,但是我们在用java代码插入到数据库时间的时候却出现了问题。
比如在java代码里面插入的时间为:2017-08-21 17:29:56
但是在数据库里面显示的时间却为:2017-08-21 09:29:56
因为时区设置的问题。
UTC代表的是全球标准时间 ,但是我们使用的时间是北京时区也就是东八区,领先UTC八个小时。
UTC + (+0800) = 本地(北京)时间
解决方案:
url的时区使用中国标准时间。也是就 serverTimezone=Asia/Shanghai
spring:
datasource:
username: root
password: root
url: jdbc:mysql://localhost:3306/sakila?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
driver-class-name: com.mysql.cj.jdbc.Driver
mybatis:
type-aliases-package: com.utry.entity
mapper-locations: classpath:mapper/*Mapper.xml
至此完美解决!