解决mysql java.sql.SQLException: The server time zone value‘XXXXXX‘ is unrecognized or represents...

在linux服务器上安装MySQL数据库服务,在MySQL服务启动时,会尝试使用主机时区设置MySQL服务的系统变量system_time_zone。在服务启动时可以使用--timezone显式配置当前系统支持的时区。如果启动时没有显式配置,MySQL的time_zone初始值就是‘SYSTEM’,服务中的Global时区和Session时区和服务器时区一致。如果我们程序服务器的时区与连接数据库的时区不一致就会发生异常。

查看MySQL所在服务器时区:

[root@snopyf ~]# timedatectl
      Local time: Thu 2022-08-25 01:45:46 EDT
  Universal time: Thu 2022-08-25 05:45:46 UTC
        RTC time: Thu 2022-08-25 05:45:45
       Time zone: America/New_York (EDT, -0400)
     NTP enabled: yes
NTP synchronized: yes
 RTC in local TZ: no
      DST active: yes
 Last DST change: DST began at
                  Sun 2022-03-13 01:59:59 EST
                  Sun 2022-03-13 03:00:00 EDT
 Next DST change: DST ends (the clock jumps one hour backwards) at
                  Sun 2022-11-06 01:59:59 EDT
                  Sun 2022-11-06 01:00:00 EST

当前MySQL服务器时区属于America/New_York,

打印了一下当前程序时区

INFO 30312 ---[main]com.venus.StorageApplication:sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=29,lastRule=null]

很明显不一致。

解决办法:

  • 方法一:修改MySQL服务器时区和重启数据库
#使用命令查看当前支持的时区,选择与程序一致的进行修改,
[root@snopyf ~]# timedatectl list-timezones
...
Asia/Seoul
Asia/Shanghai
Asia/Singapore
...
#修改系统时区
[root@snopyf ~]# timedatectl set-timezone Asia/Shanghai
#重启数据库
[root@snopyf ~]# systemctl restart mysqld
  • 方法二:

在jdbc连接的url后面加上serverTimezone=可用时区,即可解决问题,

  • 方法三:MySQL5.1.28以下版本不会存在时区的问题。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值