1. 程式人生 > >JSP,servlet和資料庫之間傳值出現亂碼的問題

JSP,servlet和資料庫之間傳值出現亂碼的問題

 最近困擾我很久的一個問題終於解決了,為他我頭疼了好幾天,問題是JSP通過servlet向資料庫傳值,查詢顯示在頁面的時候出現了亂碼,原先我資料庫中有兩行帶有中文的資料,查詢的時候倒是沒有出現亂碼,我debug一下,發現JSP和servlet中所有接受中文字符集的變數都沒有出現亂碼,我去資料庫檢視,所有新增的中文字元都是問號,問題發現了,我就百度什麼原因,有人說改變tomcat字符集,通過更改server.xml檔案的字符集來接受中文字元,
方法一:
<Connector port="8080" protocol="HTTP/1.1"   
         connectionTimeout="20000"   
          redirectPort="8443"   
         URIEncoding="UTF-8"/> 


我試了一下還是沒能解決問題,
方法二:
如果通過servlet向資料庫傳送資料中包含中文,可以再servlet中設定
request.setCharacterEncoding("UTF-8");
  response.setContentType("text/html;charset=UTF-8");


方法三:
 在頁面時設定charset的字符集
 <%@ page language="java" contentType="text/html; charset=utf-8"  pageEncoding="utf-8"%>  
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 


方法四:
 在web.xml檔案定義編碼,同時在SetCharacterEncodingFilter類裡定義編碼為utf-8
web.xml:
 <filter>
<filter-name>SetCharacterEncodingFilter</filter-name>
<filter-class>com.bzu.servlet.SetCharacterEncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>SetCharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>


SetCharacterEncodingFilter類:
public void doFilter(ServletRequest request, ServletResponse response,   FilterChain chain) throws IOException, ServletException { 
   request.setCharacterEncoding("UTF-8");//處理編碼  
   response.setCharacterEncoding("UTF-8");//處理編碼
   chain.doFilter(request, response);//讓過濾器執行下一個請求
   } 
  public void destroy() {
   
  }
  public void init(FilterConfig arg0) throws ServletException {
    }


方法五:在form表單裡定義編碼
 accept-charset="utf-8" onsubmit="document.charset='utf-8';"  


這些方法都試過了,還是出現了亂碼。無奈,之後在群裡請教大神,有一個大神說,在MySQL資料庫裡執行下面這一句話
  show variables like '%char%';


我執行之後的結果是
 
大神說其中我這兩個需要更改,
 
然後我就找到安裝目錄下的my.ini檔案吧把下面幾句話給成如下格式:
default-character-set=utf8
default-storage-engine=INNODB



之後重啟MySQL,之後果真問題解決了。

附帶群的qq號, 293074111希望群裡能幫助一下真正愛學習Java的同學