zoukankan      html  css  js  c++  java
  • MySql的时区(serverTimezone)问题

    mysql8.x的jdbc升级了,增加了时区(serverTimezone)属性,并且不允许为空。

    配置jdbc的URL:jdbc:mysql://[IP]:[PORT]/[DB]?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true

    应用运行一段时间后,发现数据库中登记的时间和正常的时间不一致。

    查询表字段值:

     而现在电脑的时间是:

     问题排查

    1、服务器时间不同步

    使用命令:date,查看linux服务器时间

    [root@abc ~]# date
    Sat Mar  7 18:43:30 CST 2020

    服务器的机器时间没有问题

    2、程序问题

    uLog.setLogTime(new Date());

    程序是使用的机器时间,不会有问题

    3、数据库时间

    查看数据库时间:select sysdate()

    复制代码
    mysql> select sysdate();
    +---------------------+
    | sysdate()           |
    +---------------------+
    | 2020-03-07 18:48:01 |
    +---------------------+
    1 row in set
    复制代码

    时间也是没有问题,最后考虑到jdbc增加了时区属性


    问题根源

    UTC是什么时区

    不属于任意时区  。协调世界时,又称世界统一时间,世界标准时间,国际协调时间,简称UTC。

    时区(Time Zone)是地球上的区域使用同一个时间定义。1884年在华盛顿召开国际经度会议时,为了克服时间上的混乱,规定将全球划分为24个时区。在中国采用首都北京所在地东八区的时间为全国统一使用时间。

    例:已知东京(东九区)时间为5月1日12:00,求北京(东八区)的区时?北京时间=12:00-(9-8)=11:00(即北京时间为5月1日11:00)。

    问题找到了,就是时区字段的问题


    解决方法

    修改jdbc时区,改成服务器所在地的真实时区

    修改前:jdbc:mysql://[IP]:[PORT]/[DB]?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true
    修改后:jdbc:mysql://[IP]:[PORT]/[DB]?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true

    重启应用,发现时间是正确的

    复制代码
    +---------------------+
    | log_time            |
    +---------------------+
    | 2020-03-07 19:04:06 |
    | 2020-03-07 19:04:03 |
    | 2020-03-07 19:04:03 |
    | 2020-03-07 19:04:03 |
    | 2020-03-07 19:04:03 |
    | 2020-03-07 19:04:03 |
    | 2020-03-07 19:04:02 |
    | 2020-03-07 19:04:02 |
    | 2020-03-07 19:03:51 |
    | 2020-03-07 10:40:35 |
    | 2020-03-07 10:40:35 |
    | 2020-03-07 10:40:35 |
    复制代码
  • 相关阅读:
    nyoj 19-擅长排列的小明(STL-next_permutation())
    航空概论(历年资料,引之百度文库,PS:未调格式,有点乱)
    2018年航空概论课后作业(PS:部分答案不正确, 综合得分:83.6)
    suseoj The wheat of the prime minister
    java后台校验 hibernate validator
    图片文件上传
    Servlet之javax.servlet包
    Maven置标签<scope>
    Windows下安装Redis
    MySQL函数GROUP_CONCAT() 实现多条数据合并
  • 原文地址:https://www.cnblogs.com/coder-ahao/p/14330225.html
Copyright © 2011-2022 走看看