我的Mysql版本是 8.0.18
使用的Driver是 com.mysql.cj.jdbc.Driver
当我们连接时没有指定时区,mysql会使用设置中time_zone
所设置的时区,这个值默认是SYSTEM
,也就是指向system_time_zone
这个变量,在中国,这个值显示是CST
。
mysql> show variables like "%time_zone%";
+------------------+--------+
| Variable_name | Value |
+------------------+--------+
| system_time_zone | CST |
| time_zone | SYSTEM |
+------------------+--------+
CST可以代表四个时区!!这是一个有歧义的名字!坏就坏在这里了。java会以为这个CST是美国中部时间 (Central Standard Time )。这样就导致了JDBC获取TimeStamp时的时区出错!。
解决方法有两种:
- 连接时指定时区,加参数serverTimezone=Aisa/Shanghai
- 改mysql变量,从
SYSTEM
改为+08:00
,方法是set global time_zone = ‘+08:00‘;
相关文章: https://www.cnblogs.com/bgo-tech/p/6929701.html
原文地址:https://www.cnblogs.com/modyuan/p/12302216.html
时间: 2024-10-13 14:35:35