JDBC中在配置數據源url中部分參數解析


url: jdbc:mysql://localhost:3306/mydb?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false

1. serverTimezone 關於時區的設置

  常見問題:從數據庫返回的時間比真正保存的時間提前8小時。

  解決:將 serverTimezone=UTC  改為 serverTimezone=Asia/Shanghai 

2.useUnicode和characterEncoding  添加的作用是:指定字符的編碼、解碼格式。

            例如:mysql數據庫用的是gbk編碼,而項目數據庫用的是utf-8編碼。這時候如果添加了useUnicode=true&characterEncoding=UTF-8 ,那么作用有如下兩個方面:

  2.1 存數據時:

      數據庫在存放項目數據的時候會先用UTF-8格式將數據解碼成字節碼,然后再將解碼后的字節碼重新使用GBK編碼存放到數據庫中。

  2.2 取數據時:

      在從數據庫中取數據的時候,數據庫會先將數據庫中的數據按GBK格式解碼成字節碼,然后再將解碼后的字節碼重新按UTF-8格式編碼數據,最后再將數據返回給客戶端。

 

3.zeroDateTimeBehavior

  JAVA連接MySQL數據庫,在操作值為0的timestamp類型時不能正確的處理,而是默認拋出一個異常,就是所見的:java.sql.SQLException: Cannot convert value '0000-00-00 00:00:00' from column 7 to TIMESTAMP。這一問題在官方文檔中有詳細說明,詳見如下鏈接:

http://bugs.mysql.com/bug.php?id=19274

http://dev.mysql.com/doc/refman/5.5/en/connector-j-installing-upgrading.html

 

在JDBC連接串中有一項屬性:zeroDateTimeBehavior,可以用來配置出現這種情況時的處理策略,該屬性有下列三個屬性值:

exception:默認值,即拋出SQL state [S1009]. Cannot convert value....的異常;

convertToNull:將日期轉換成NULL值;

round:替換成最近的日期即0001-01-01;

 

因此對於這類異常,可以考慮通過修改連接串,附加zeroDateTimeBehavior=convertToNull屬性的方式予以規避,例如:

jdbc:mysql://localhost:3306/mydb?zeroDateTimeBehavior=convertToNull

 

   從另一個層面講,這類異常的觸發也與timestamp賦值的操作有關,如果能夠在設計階段和記錄寫入階段做好邏輯判斷,避免寫入 '0000-00-00 00:00:00'這類值,那么也可以避免出現 Cannot convert value '0000-00-00 00:00:00' from column N to TIMESTAMP的錯 誤。

4.useSSL 

是否允許SSL連接


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM