JDBC连接报错:java.sql.SQLException: The server time zone value ‘Öйú±ê׼ʱ¼ä‘ is unrecognized…解决方案
先上解决方案
在JDBC连接的url中加上useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC
最初我的url是这么写的
String url = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8";
这时我在后面使用&加上后续的配置之后便可以用了。
String url = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC";
问题解决!!!!
原因分析
那么究竟是什么原因导致的呢?查阅了许多博主的文章分析之后发现最根源的问题还是MySQL的时区和JDBC的驱动不兼容(好家伙,MySQL还有时区???)
这里我用的版本是:
- MySQL 5.7版本
- JDBC驱动8.0.11版本
那么是否是因为JDBC驱动版本太高了呢?
我换了之前使用的JDBC 5.1.7 版本,不报错。(好家伙,好一个向下兼容)
也就是说,如果想要解决此类问题,那么有两种方法“
- 向上述方法一样,通过配置来指定服务连接的时间。
- 一劳永逸的解决此类方法,原因就是MySQL在安装的时候驱动时区默认是美国时间,北京时间比美国那边晚了八小时,我们就修改掉我们MySQL的配置。找到MySQL配置文件中的my.cnf,然后在mysqld下边的配置中添加一行:default-time_zone = ‘+8:00’
这点要注意,如果我们将驱动改为GMT+8时区,那么我们需要这么写:serverTimezone=GMT%2B8";