【發開問題總結】 使用jdbc-Template時,插入中文出現亂碼如何解決?

當我們做項目時,從瀏覽器讀取數據到mysql時出現了中文亂碼應該如何解決?


一、分析問題出現的原因

首先我們要分析可能出現問題的地方,從瀏覽器發送數據到數據庫一共要經歷三次字符傳輸。

  1. 瀏覽器發送請求給servlet。
  2. servlet通過連接池發送給mysql。
  3. mysql存儲時的字符設置。

因此處理字符問題應從這三個方面去考慮


二、解決方案

首先,先看一下自己mysql數據庫的編碼格式

1.1 查看字符編碼

mysql> show create table user \G;

*************************** 1. row *************************** 

Table: user Create Table: CREATE TABLE `user` ( 

`name` varchar(11) DEFAULT NULL

) ENGINE=InnoDB DEFAULT CHARSET=latin1 1 row in set (0.00 sec) 

我們可以看到表的默認字符集是latin1. 所以我們在創建表的時候就需要指定表的字符集:

create table user(name varchar(11)) default charset=utf8;

1.2 查看數據庫編碼:

show variables like '%char%';

修改字符編碼:

set character_set_server=utf8; 
set character_set_database=utf8; 
show variables like '%char%';

如果問題沒有解決就修改連接池的設置

在druid.properties裏將原來的

driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql:///travel

username=root
password=admin
initialSize=5
maxActive=10
maxWait=3000

改成

driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql:///travel?useSSL=false&characterEncoding=utf-8&autoReconnect=true

username=root
password=admin
initialSize=5
maxActive=10
maxWait=3000

即在url後面加個characterEncoding=utf-8。

最後查看瀏覽器的請求是否設置爲了utf-8編碼傳輸

用如下代碼,設置request的編碼格式爲utf-8。

request.setCharacterEncoding("utf-8");

至此所有mysql可能出現編碼錯誤的問題都解決了。

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