我的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时的时区出错!。
解决方法有两种:
1.连接时指定时区,加参数serverTimezone=Aisa/Shanghai(不推荐)
2.改mysql变量,从SYSTEM改为+08:00,方法是set global time_zone = '+08:00';
显示结果 0 row(s) affected 0.000 sec?不要怕,已经执行成功了。
不过这种方法也有弊端,mysql服务重启后,就要重新配置了。
3.永久解决。找到此路径中的my.ini配置文件,并打开它!
在该文件的[mysqld]字段下面添加一行:default-time-zone=’+08:00’,保存即可。下次再重启MySQL时,时区仍为东八区,不会还原。
添加一行代码的大致位置如下: