mysql8.x的jdbc升級了,增長了時區(serverTimezone)屬性,而且不容許爲空。mysql
配置jdbc的URL:jdbc:mysql://[IP]:[PORT]/[DB]?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true
應用運行一段時間後,發現數據庫中登記的時間和正常的時間不一致。linux
查詢表字段值:sql
而如今電腦的時間是:數據庫
一、服務器時間不一樣步服務器
使用命令:date,查看linux服務器時間spa
[root@abc ~]# date
Sat Mar 7 18:43:30 CST 2020
服務器的機器時間沒有問題code
二、程序問題cdn
uLog.setLogTime(new Date());
程序是使用的機器時間,不會有問題server
三、數據庫時間blog
查看數據庫時間: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 |