詳解mysql中url時區的陷阱該如何規避

小云云
發布: 2017-12-22 13:38:13
原創
1588 人瀏覽過

最近在使用mysql的6.0.x以上的jar的時候,需要在程式碼url的連結裡面指定serverTimezone。就會出現異常,這個問題問題,是關於mysql中url時區的,發現這個陷阱如果大家不注意可能都會遇到,本文主要和大家分享mysql中url時區的陷阱該如何規避。

1.未指定serverTimezone

##xml裡面設定url


<property name="url" value="jdbc:mysql://localhost:3306/mybatisstudy"/>
登入後複製
出現的例外

##

Caused by: com.mysql.cj.core.exceptions.InvalidConnectionAttributeException: The server time zone value '�й���׼ʱ��' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.
登入後複製

您必須設定伺服器或JDBC驅動程式(透過serverTimezone配置屬性),如果您想要使用時區支持,則需要使用一個更詳細的時區值。


2.網路上的解決方案

在url後面加上參數?serverTimezone=utc

<property name="url" value="jdbc:mysql://localhost:3306/springdatastudy?serverTimezone=UTC"/>
登入後複製

2.1.遇到的問題

雖然上面加上時區程式不出錯了,但是我們在用java程式碼插入到資料庫時間的時候卻出現了問題。


例如在java程式碼裡面插入的時間為:2017-08-21 17:29:56

但是在資料庫裡面顯示的時間卻為:2017-08-21 09:29:56


3.根本原因

因為時區設定的問題。


UTC代表的是全球標準時間 ,但是我們使用的時間是北京時區也就是東八區,領先UTC八個小時。


UTC + (+0800) = 本地(北京)時間


4.解決方案

url的時區使用中國標準時間。也是就serverTimezone=Asia/Shanghai


4.1 使用java程式碼取得本地的時區id

Calendar cal = Calendar.getInstance();
TimeZone timeZone = cal.getTimeZone();
System.out.println(timeZone.getID());
System.out.println(timeZone.getDisplayName());
登入後複製
Asia/Shanghai
中国标准时间
登入後複製

相關推薦:


#MySQL中or語句用法範例

MySQL中關於索引與觸發器詳解

MySQL中關於日期函數總結

以上是詳解mysql中url時區的陷阱該如何規避的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!