数据库时区问题导致时间显示异常

起因

今天用Sqlyong客户端在Tidb数据库(兼容Mysql协议)里面查询一些数据,本来想通过时间字段看看数据产生的时间,结果发现即便是刚创建的数据时间字段也和我当前的时间对不上,差了13个小时。

调查

太奇怪了,于是google了一下资料,原来如果没有自定义设置,数据库默认使用的时区是系统时区,而系统时区为CST,这个CST又有好多种解释,分别为如下。

  • 美国中部时间 Central Standard Time (USA) UTC-06:00
  • 澳大利亚中部时间 Central Standard Time (Australia) UTC+09:30
  • 中国标准时 China Standard Time UTC+08:00
  • 古巴标准时 Cuba Standard Time UTC-04:00

当JDBC与Mysql服务器建立连接时,如果我们没有给JDBC指定时区,JDBC就会取Mysql服务器的默认时区,也就是CST,而它又把CST理解成了美国中部时间,结果就使用了美国中部时间的时区,而不是后端系统服务器的时区。

解决办法

  1. 设置Tidb服务器的时区为我们想要的时区,比如UTC+00,或者UTC+08;
  2. 重新配置后端系统连接数据库服务器的URL,添加参数serverTimezone=UTC;

总结

在和数据库打交道的时候一定要注意时区问题,尤其是针对涉及国际化的业务来说,各个服务器的时区可能有很大差异,如果不显示的指定统一的时区,很容易导致混乱。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容