您好朋友,感謝您關注xiaosilent,我在blogjava的博客已經停止更新,請訪問http://kuan.fm了解我的最新情況,謝謝!
          隨筆-82  評論-133  文章-0  trackbacks-0

          數據庫的亂碼問題,一直都相當惱人,不過,要解決起來,其實也還是比較容易……

          首先,需要設定數據庫的編碼,也就是要在數據庫連接字串里面設置好編碼:
          url=jdbc:mysql://localhost:3306/databaseName?useUnicode=true&characterEncoding=UTF-8
          在建立數據庫連接的時候,再指定用戶名和密碼就可以了。

          隨后,需要在數據庫和數據表里都設定好編碼:
          CREATE DATABASE `db` /*!40100 DEFAULT CHARACTER SET utf8 */;
          USE `db`;

          CREATE TABLE `user` (
          ? `id` int(11) NOT NULL auto_increment,
          ?? `username` char(20) default NULL COMMENT '用戶名',
          ?? `password` char(20) default NULL COMMENT '密碼',
          ? PRIMARY KEY? (`id`)
          ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;



          最后是設定JSP文件的編碼,
          request.setCharacterEncoding("UTF-8");
          response.setCharacterEncoding("UTF-8");

          或者是用個Filter:

          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;

          /**
          ?*?字符編碼過濾器
          ?*?
          ?*?
          @author ?xiaosilent.
          ?*?
          ?
          */
          public ? class ?CharacterEncodingFilter? implements ?Filter?{

          ????
          protected ?FilterConfig?filterConfig;

          ????
          private ?String?targetEncoding? = ? " UTF-8 " ;

          ????
          /**
          ?????*?初始化過濾器,獲取初始化參數,如果沒有設定則使用默認的UTF-8編碼.
          ?????
          */
          ????
          public ? void ?init(FilterConfig?config)? throws ?ServletException?{

          ????????
          this .filterConfig? = ?config;

          ????????
          // ?如果在web.xml里定義了編碼,則獲取,否則使用默認的UTF-8.
          ???????? if ?(config.getInitParameter( " encoding " )? != ? null )?{

          ????????????
          this .targetEncoding? = ?config.getInitParameter( " encoding " );
          ????????}

          ????}

          ????
          public ? void ?doFilter(ServletRequest?request,?ServletResponse?response,
          ????????????FilterChain?chain)?
          throws ?IOException,?ServletException?{

          ????????request.setCharacterEncoding(targetEncoding);
          ????????response.setCharacterEncoding(targetEncoding);

          ????????chain.doFilter(request,?response);

          ????}

          ????
          public ? void ?destroy()?{

          ????????filterConfig?
          = ? null ;

          ????}

          }
          在web.xml里加入:? <filter>
          ? ?? ?<filter-name>CharacterEncodingFilter</filter-name>
          ? ?? ?<filter-class>xiao.cms.filter.CharacterEncodingFilter</filter-class>
          ? </filter>
          ? <filter-mapping>
          ? ?? ?<filter-name>CharacterEncodingFilter</filter-name>
          ? ?? ?<url-pattern>/*</url-pattern>
          ? </filter-mapping>
          這里使用的是UTF-8,所以沒有指定參數,如果用非UTF-8編碼,指定一個名為encoding的參數即可.


          經過這樣三個步驟,就不存在亂碼問題了。

          另,不推薦用 MySQL-Front 這個客戶端程序管理UTF-8編碼的數據庫。如果是GBK編碼還可以考慮,UTF-8則會出現編碼問題,導致程序不能正常工作,強烈推薦 Navicat 。 功能強大,默認使用UTF-8編碼,界面友好、美觀。

          posted on 2007-01-17 20:55 xiaosilent 閱讀(809) 評論(0)  編輯  收藏 所屬分類: Java相關
          主站蜘蛛池模板: 井冈山市| 新绛县| 开阳县| 扎兰屯市| 象州县| 河东区| 五大连池市| 于田县| 黔西县| 琼海市| 蓬安县| 滨州市| 双江| 宜君县| 佳木斯市| 页游| 萍乡市| 巴里| 安康市| 富阳市| 麻栗坡县| 河北区| 锡林郭勒盟| 江门市| 新民市| 阜阳市| 高密市| 高陵县| 新河县| 呼玛县| 枝江市| 织金县| 鹿邑县| 隆昌县| 垫江县| 沙坪坝区| 竹溪县| 潜山县| 股票| 华阴市| 博罗县|