linux下java程序存入mysql时间少了8小时

原创  郑建华   2021-07-12   61人阅读  0 条评论

    最近自己在做项目时,无意中发现,接口查询出来的时间有点不对,显示凌晨4点多的创建时间,奇怪的是并没有人在那个时间插入数据。初步怀疑是服务器时间不对。使用工具箱查询时间,是正确的,并且设置了时区为Asia/Shanghai。

image.png

    查询了数据库设置的时区,显示CST

image.png

    以及当前时间,时间正常

image.png

    怪就怪在,保存接口返回的时间是正常的,再用查询接口,查询出来的数据就少了八小时,查看数据库中的时间也是少了八小时的状态。

image.png

    经过查询,数据库的时区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,最好带上这个时区的参数


本文地址:https://www.zjh336.cn/?id=2049
版权声明:本文为原创文章,版权归 郑建华 所有,欢迎分享本文,转载请保留出处!

发表评论


表情

还没有留言,还不快点抢沙发?