JDBC连接报错:java.sql.SQLException: The server time zone value ‘Öйú±ê׼ʱ¼ä‘ is unrecognized...解决方案

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";

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值