猿博园

记录生活及工作中的点点滴滴

0%

Java应用和Mysql时间相差8个时区的问题

一、概述

最近在做项目时发现,在无论在java应用中使用 java.util.Date还是使用 java.time.LocalDateTime类,获取的当前时间保存到数据库中后,数据库中的时间跟应用中获取的时间相差 8个小时。

二、排查过程

首先查看数据库和java应用的时区设置,发现时区都没为题,都为东八区。困惑了好久 再一次配置 数据库连接池时发现,配置的JDBC连接路径中多了 “serverTimezone=UTC”,参数,去除此参数后重启再次保存时间 java应用和数据库中的时间一致了。

三、设置数据库的时区

1、首先查看数据库配置的时区

1
2
3
4
5
6
7
mysql> show variables like '%time_zone%';
+------------------+--------+
| Variable_name | Value |
+------------------+--------+
| system_time_zone | CST |
| time_zone | SYSTEM |
+------------------+--------+

如果 system_time_zoneCST 表示此时数据库中设置的时区非东八区

2、修改时区

  1. 命令行方式

    1
    2
    3
    4
    mysql> set global time_zone = '+08:00'; -- 设置全局的时区
    Query OK, 0 rows affected (0.00 sec)
    mysql> set time_zone = '+08:00'; -- 设置当前会话
    Query OK, 0 rows affected (0.00 sec)

    说明:

    1. 设置完成后需要重启应用才可以
    2. 如果通过命令行设置,如果重启MySQL 服务后之前设置的就失效了。
  2. 修改配置文件

    在配置文件 my.conf (Linux环境) 或 my.ini (Window环境) 中添加 ``default-time-zone = ‘+08:00’`。重启数据库即可。

--------------------------本文结束感谢您的阅读--------------------------
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!