在使用mysql的6.0.x以上的jar的時候积锅,需要在代碼url的鏈接里面指定serverTimezone灭美。就會出現(xiàn)異常
1.未指定serverTimezone
- xml里面配置url
<property name="url" value="jdbc:mysql://localhost:3306/mybatisstudy"/>
- 出現(xiàn)的異常
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.
您必須配置服務(wù)器或JDBC驅(qū)動程序(通過serverTimezone配置屬性)推溃,如果您想要使用時區(qū)支持,則需要使用一個更詳細(xì)的時區(qū)值届腐。
2.網(wǎng)上的解決方案
- 在url后面加上參數(shù)?serverTimezone=utc
<property name="url" value="jdbc:mysql://localhost:3306/springdatastudy?serverTimezone=UTC"/>
2.1.遇到的問題
雖然上面加上時區(qū)程序不出錯了铁坎,但是我們在用java代碼插入到數(shù)據(jù)庫時間的時候卻出現(xiàn)了問題。
比如在java代碼里面插入的時間為:2017-08-21 17:29:56
但是在數(shù)據(jù)庫里面顯示的時間卻為:2017-08-21 09:29:56
3.根本原因
因?yàn)闀r區(qū)設(shè)置的問題犁苏。
UTC代表的是全球標(biāo)準(zhǔn)時間 厢呵,但是我們使用的時間是北京時區(qū)也就是東八區(qū),領(lǐng)先UTC八個小時傀顾。
UTC + (+0800) = 本地(北京)時間
4.解決方案
url的時區(qū)使用中國標(biāo)準(zhǔn)時間襟铭。也是就serverTimezone=Asia/Shanghai
4.1 使用java代碼獲取本地的時區(qū)id
Calendar cal = Calendar.getInstance();
TimeZone timeZone = cal.getTimeZone();
System.out.println(timeZone.getID());
System.out.println(timeZone.getDisplayName());
Asia/Shanghai
中國標(biāo)準(zhǔn)時間
5.中文亂碼的解決方案
url鏈接后面加上編碼字符 characterEncoding=utf8
jdbc.url=jdbc:mysql://localhost:3306/cnblogs?serverTimezone=Asia/Shanghai&characterEncoding=utf8