mysql中的存儲中文的問題解決方法
前些時候的做過一個實訓是關於mvc的一個網站,其中遇到了很多問題因爲時間的原因,把這些問題給省略掉了,最近又碰到了這些問題,這次無論怎樣都要把問題解決掉一個是mysql存儲中文的問題(在庫中顯示的是????),我相信大部分人的問題應該都是這樣子的....
現在我把我的解決方法總結一下(當人也是從網上看一些大俠們的方法,加上自己的感想,如有雷同,敬請諒解)。
第一,編碼的問題是首當其衝要解決的,我個人的用的是utf-8的(gbk的沒有試過)。
先要把你的mysql的編碼設置爲UTF-8。
如果想方便的話可以在mysql的根目錄下找到 my.ini 陪置文件,把[mysql] default-character-set=編碼。中的編碼改成utf8(注意是utf8不是utf-8)。
第二,然後在連接數據庫的時候,代碼後面加上useUnicode=true&characterEncoding=utf-8,格式爲
DriverManager.getConnection( "jdbc:mysql://localhost/test?useUnicode=true&characterEncoding=utf-8",user,password);這樣做的目的是連接數據的時候都是採用utf-8的形式。
第三,設置過濾器。
- import java.io.IOException;
- import javax.servlet.Filter;
- import javax.servlet.FilterChain;
- import javax.servlet.FilterConfig;
- import javax.servlet.ServletException;
- import javax.servlet.ServletRequest;
- import javax.servlet.ServletResponse;
- public class SetCharacterEncodingFilter implements Filter {
- protected String encoding = null;
- protected FilterConfig filterConfig = null;
- public void init(FilterConfig filterConfig) throws ServletException {
- this.filterConfig = filterConfig;
- this.encoding = filterConfig.getInitParameter("encoding");
- }
- public void doFilter(ServletRequest request, ServletResponse response,
- FilterChain chain) throws IOException, ServletException {
- request.setCharacterEncoding("UTF-8");
- System.out.println("執行");
- chain.doFilter(request, response);
- }
- public void destroy() {
- this.encoding = null;
- this.filterConfig = null;
- }
- protected String selectEncoding(ServletRequest request) {
- return (this.encoding);
- }
- }
然後就是在web。xml文件中配置(現在的tomcat版本,可以自動檢查是夠更新,所以不用重啓,稍等片刻就可以了)
- <filter>
- <filter-name>Set Character Encoding</filter-name>
- <filter-class>com.bean.SetCharacterEncodingFilter</filter-class>
- <init-param>
- <param-name>encoding</param-name>
- <param-value>UTF-8</param-value>
- </init-param>
- </filter>
- <filter-mapping>
- <filter-name>Set Character Encoding</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
如果還不能解決的,你可以給我留言,咱們共同解決,如果有什麼不對的地方,請各位指出,咱們共同探討....