解決MySQL8.0和java8時區的問題

問題描述

java將當前時間保存到MySQL數據庫時,MySQL中的時間不正確。
java中打印的時間是 2020-04-24 02:00:00,linux系統打印的時間也是2020-04-24 02:00:00,但是進入MySQL之後的時間不正確,變爲了其他值。
問題分析

**原因一:**
java數據庫連接使用UTC時區(世界標準時間),即serverTimezone=UTC
url: jdbc:mysql://localhost:3306/test?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&useSSL=true
**原因二:**
MySQL使用的time_zone屬性是+00:00,而北京時間比UTC時間早8小時,即UTC+08:00

檢查MySQL

/**
 * 可查看全局的時區設置和會話的時區設置
 * global.time_zone負責java連接數據庫時的時區設置
 * session.time_zone負責Navicat客戶端連接數據庫時的時區設置
 * /
mysql> select @@global.time_zone,@@session.time_zone;

/**
 * 還有一種方法
 * System代表採用系統時區
 * CST是一種很亂的時區,它包括了4個時區
 * /
mysql> show variables like '%time_zone%'; 

// 驗證時區,這行命令可以檢測session.time_zone是否正確配置
mysql> select now();

解決方法
步驟一:
修改java中的時區爲東八區

// serverTimezone可以設置爲北京時間GMT%2B8、上海時間Asia/Shanghai或者香港時間Hongkong
url: jdbc:mysql://localhost:3306/test?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8&useSSL=true

步驟二:
修改MySQL數據庫的時區爲東八區

// 方法一:使用命令(優點:不需要重啓MySQL服務,缺點:一旦MySQL服務被重啓,設置就會消失)
mysql> set time_zone = '+8:00';
mysql> set global time_zone = '+8:00';
// 方法二:修改my.ini配置文件(優點:永久保存設置,缺點:需重啓MySQL服務)
[mysqld]
// 設置默認時區
default-time_zone='+8:00'

原博客地址(如有侵權請聯繫作者刪除):
解決MySQL8.0時區的問題

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章