最近自己在做项目时,无意中发现,接口查询出来的时间有点不对,显示凌晨4点多的创建时间,奇怪的是并没有人在那个时间插入数据。初步怀疑是服务器时间不对。使用工具箱查询时间,是正确的,并且设置了时区为Asia/Shanghai。
查询了数据库设置的时区,显示CST
以及当前时间,时间正常
怪就怪在,保存接口返回的时间是正常的,再用查询接口,查询出来的数据就少了八小时,查看数据库中的时间也是少了八小时的状态。
经过查询,数据库的时区CST,它居然能够表示四种时区,分别为:
1.美国中部时间 Central Standard Time (USA) UTC-06:00
2.澳大利亚中部时间 Central Standard Time (Australia) UTC+09:30
3.中国标准时 China Standard Time UTC+08:00
4.古巴标准时 Cuba Standard Time UTC-04:00
由于CST存在歧义,所以导致java通过jdbc去获取时区的时候,就会出现问题,通常会把CST解析为GTM+3时区
解决方案:
方案一:
直接在jdbc的url中加入&serverTimezone=Asia/Shanghai,指定时区
方案二:
连接数据库
可以先查看当前时区:show variables like '%time_zone%';
确认时区为CST后再进行修改:set time_zone='+8:00';
方案三:
修改my.cnf文件,再mysqld设置项下添加default-zone-time='+8:00'
我选择的是方案一,并且以后连接mysql的jdbc,最好带上这个时区的参数
还没有评论,来说两句吧...