天天看点

mysql中的CST时区问题

转载地址:https://www.cnblogs.com/jiading/articles/12383072.html

在项目操作过程发现了一个时区的问题,问题现象为sql打印的时间和数据库里面存储的时间不一样。后来发现问题原因为mysql的时区为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时区。

这个时候,通常有两个解决办法:

1.修改mysql的设置,把mysql的时区设置为UTC或+8:00

修改mysql的时区也有两种方式

1)通过客户端连接mysql,通过命令设置时区

可以先查看当前时区:show variables like '%time_zone%';

确认时区为CST后再进行修改:set time_zone='+8:00';

2)修改my.cnf文件,再mysqld设置项下添加default-zone-time='+8:00'

2.修改jdbc连接设置,直接把连接的时区固定死,绕开mysql本身的时区。

就是在jdbc连接配置上添加以下两个配置即可:

useTimezone=true&serverTimezone=GMT%2B8

分别为启用时区设置和设置连接服务的时区。

此时,jdbc操作都会使用自定义时区去进行时间处理。