問題描述
java将目前時間儲存到MySQL資料庫時,MySQL中的時間不正确。
java中列印的時間是 2020-04-24 02:00:00,linux系統列印的時間也是2020-04-24 02:00:00,但是進入MySQL之後的時間不正确,變為了其他值。
問題分析
**原因一:**
java資料庫連接配接使用UTC時區(世界标準時間),即serverTimezone=UTC
**原因二:**
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時區的問題