概述
最近某个 java 项目反馈某张表的datetime类型字段与服务器实际日期不符合,相差8h,下面简单介绍下解决思路及方法。
思路:
mysql默认使用的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时区。
这里只需要调整mysql时区即可。
1、查看 mysql数据库 时区
show variables like '%time_zone';
show variables like 'log_time%';
2、修改mysql的设置,把mysql的时区设置为 UTC 或+8:00
1)通过客户端连接mysql,通过命令设置时区
-- 先查看当前时区:
show variables like '%time_zone%';
-- 确认时区为CST后再进行修改解决时区问题
set time_zone='+8:00';
-- 解决mysql日志时间与系统时间相差8h
set global log_timestamps=SYSTEM;
2)修改my.cnf文件,再mysqld设置项下添加
注意一定要在 [mysqld] 之下加 ,否则会出现 unknown variable ‘default-time-zone=+8:00’
#解决时区问题
default-time-zone = '+8:00'
#解决mysql日志时间与系统时间不一致问题
log_timestamps=SYSTEM
后面会分享更多devops和DBA方面内容,感兴趣的朋友可以关注下!