美文网首页Spring Boot指南
数据库时区问题导致时间显示异常

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

作者: 逃离火星 | 来源:发表于2019-04-22 22:49 被阅读0次

起因

今天用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;

总结

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

相关文章

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

    起因 今天用Sqlyong客户端在Tidb数据库(兼容Mysql协议)里面查询一些数据,本来想通过时间字段看看数据...

  • 三、PostgreSQL常用语句

    1、插入多条语句 2、清空表 3、查询当前系统时间 4、显示当前时区 5、查询可选的时区 6、修改数据库时区 修改...

  • Sqlite3插入日期时间,时间错误

    1.使用 数据库插入数据后,日期正确,时间不正确,原因是时区导致。2.经验证,创建表时,使用: 即可显示正确的时间。参考

  • Java 中的时区理解和处理

    本文内容:1,时区了解一下2,产生时区的原因3,常用时间类,哪些是有会导致时区问题4,开发中如何避免产生时区问题 ...

  • docker nexus3 磁盘空间满导致orientdb数据库

    问题:docker nexus3 磁盘空间满导致orientdb数据库异常问题产生时间:2020-03-20、20...

  • 游戏时区问题小解

    由于时区、夏令时的存在,游戏内的时间显示/计算都要考虑时区问题并进行相应处理。时间计算不用说,要排除玩家本地时区影...

  • MySQL数据库修改时间、时区

    MySQL数据库修改时间、时区 mysql默认使用的SYSTEM时区,即EST时区,查询相关资料可知,EST时区要...

  • Mysql更新时区表

    时区问题 Django项目做了数据库迁移后有时候出现时区上的问题,例如django项目中设置的时区是TIME_Z...

  • 服务器修改时区

    查看服务器时间 修改时区 方法一 : 方法二 : 注意,修改时区后,若数据库是之前时区启动的,需要重启数据库

  • ABAP时间的转换

    SAP数据库表中的时间是根据系统时区存储的,这里需要将时间转换成用户时区。首先获取系统时区: 然后获取用户时区: ...

网友评论

    本文标题:数据库时区问题导致时间显示异常

    本文链接:https://www.haomeiwen.com/subject/ctepgqtx.html