The server time zone value 'EDT' is unrecognized or represents more than one time zone.

The server time zone value 'EDT' is unrecognized or represents more than one time zone.mysql

因爲數據庫和系統時區差別所形成的sql


首先想到的是看看鏈接數據庫的url有沒有問題:jdbc:mysql://xxx:3306/dbname?useUnicode=true&characterEncoding=utf-8數據庫

 

解決方案:
    在jdbc鏈接的url後面加上serverTimezone=GMT便可解決問題,若是須要使用gmt+8時區,須要寫成GMT%2B8,不然會被解析爲空。再一個解決辦法就是使用低版本的MySQL jdbc驅動,5.1.28不會存在時區的問題。服務器

例如:
url=jdbc:mysql://localhost:3306/bbs?useUnicode=true$characterEncoding=utf8測試

改成url

url=jdbc:mysql://localhost:3306/bbs?serverTimezone=UTC
 rest

 

沒問題,並且在開發環境url是能夠正常使用的。code

 

在網上查了一些資料說是可能數據庫時間與數據庫所在服務器時間不一致致使,可是看了下二者時間是一致的,問題一直沒有解決,能夠肯定的是跟數據庫所在服務器的時區有關,最後順這個思路去查找相關更換服務器時區的資料。server

 

最後比較開發環境與測試環境的數據庫服務器時區,發現開發環境是CST,測試環境是EDT:utf-8

服務器上直接數據date命令就能夠看到時區,數據庫裏咱們是在navicate中使用show variables like '%time_zone%'查看數據庫時區。

 

因而更換測試環境時區:首先cat /etc/sysconfig/clock文件,發現這是美國時間,根據註釋發如今/etc/localtime文件是定義時區的文件,備份並刪除/etc/locatime文件,而後根據網上資料找到/usr/share/zoneinfo/發現這裏都是各個時區的文件,複製上海時區文件到/etc/下並重命名爲localtime:

cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

使用date查看時間發現時區變爲CST,使用date -R查看系統時間,Thu,27 Sep 2018 08:48:24 +0800(說明是東八區,中國時區即爲東八區)

而後重啓MySQL服務:service mysqld restart,發現項目服務能夠正常啓動,問題解決!

相關文章
相關標籤/搜索