jdbc 連接mysql異常及插入中文出現亂碼

1、調用getConnection()連接數據庫就會報出異常

 DriverManager.getConnection(SQL_URL, SQL_USERNAME, SQL_PASSWORD);

通過控制檯打印看到,每次調用這個函數就會發生異常。

java.sql.SQLException: 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.

網上查了一下,說是安裝mysql 設置的時區不正確導致,重新設置mysql 的時區,如下

mysql> set global time_zone='+8:00';

這樣貌似問題可以解決了,但是數據庫如果重啓了之後,又會出現一樣的錯誤。可以通過另外一種方式來解決這個錯誤,在連接數據庫的url中設置時區

private static final String SQL_URL = "jdbc:mysql://localhost:3306/db_test;

 改成

private static final String SQL_URL = "jdbc:mysql://localhost:3306/db_test?serverTimezone=GMT%2B8"; 

這樣也可以解決時區不對的問題。

 

2、往mysql數據庫中插入中文出現亂碼

mysql 數據庫是安裝在window 上,jee開發環境也是在window,文件的編碼也設置成了utf-8格式。但是發現從頁面提交過來的中文字符,插入數據庫後出現了???這樣的亂碼。

於是把數據和裏面表格的編碼設置成utf-8 

mysql> alter database db_test character set utf-8;

設置表格編碼 alter table table_name character set utf-8;

修改之後,插入中文也不會再是亂碼了,導出war包放到ubutun的服務器進行部署,運行起來後,從頁面提交的中文字符還是出現亂碼,在window 上沒有問題,到ubutun上就出現亂碼,是兩個系統的字符編碼不一樣導致的嗎?

把ubutun 上mysql 裏面的數據庫和表格的編碼都指定成utf-8 ,其實在一開始就這樣設置了,查看也是utf-8編碼,在命令窗口中直接插入中文,再查詢出來中文也是可以正常顯示。我們吧網頁到數據庫的流程梳理一下

瀏覽器(網頁)->後臺(tomcat)->數據庫(mysql)

另外一個流程:數據庫(mysql)->後臺(tomcat)->瀏覽器(網頁)

能夠正常顯示中文,但是從頁面提交上來的中文到數據庫裏面就是亂碼,現在最好的版本就是在後臺打印一下收到的中文是不是已經出現亂碼了,同時也做了下面的修改

private static final String SQL_URL = "jdbc:mysql://localhost:3306/db_test?serverTimezone=GMT%2B8"; 

改成

private static final String SQL_URL = "jdbc:mysql://localhost:3306/db_test?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf-8";

也是修改數據庫連接的url,指定字符編碼,修改了之後,中文亂碼的問題也解決了,後臺打印看到接收到的中文也是正常的,所以應該是提交到數據庫時,數據庫沒有按照utf-8格式來接收才導致的中文亂碼。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章