mysql 时区问题
问题
插入时间到数据库中,会少13个小时(有时候是11个小时)
读取出来,则会自动加上少了的时间,读到的Date对象是正常的
环境
Linux
1 | # uname -a |
1 | # cat /etc/centos-release |
Mysql 版本
5.7.20
1 | show variables like "%time_zone%"; |
Variable name | Value |
---|---|
system_time_zone | CST |
time_zone | SYSTEM |
原因
CTS 时区问题
mysql的驱动版本换成了:
mysql-connector-java 6.0.2
应该是6.X的版本更新了时区的判断方式,导致的
时间类型
GMT
格林威治标准时间
UTC
世界协调时间
DST
夏日节约时间
CST时间
CST却同时可以代表如下 4 个不同的时区:
Central Standard Time (USA) UT-6:00
Central Standard Time (Australia) UT+9:30
China Standard Time UT+8:00
Cuba Standard Time UT-4:00
可见,CST可以同时表示美国,澳大利亚,中国,古巴四个国家的标准时间。
解决版本
一 更换驱动版本
换成之前一直用的的 5.1.45
二 连接串指定时区
serverTimezone
1 | jdbc.url=jdbc:mysql://192.168.1.211:3306/analysis?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai |
三 mysql中指定
1 | # vim /etc/my.cnf |