Corsair

          My javaWorld
          數據加載中……
          解決linux環境下jsp+mysql數據庫中文亂碼的問題

          經過一個星期的艱苦奮斗終于解決了這個問題,特將經驗摘錄下來備忘。本文將解決以下的幾種亂碼問題。

          中文存入 mysql 數據表出現的亂碼,從 JSP 頁面讀取 mysql 中文數據出現亂碼,以及在 sell 環境下查看數據庫表中文數據出現亂碼。

          linux平臺:ubuntu6.10

          mysql版本:5.0

          瀏覽器:firefox2.0

          為了解決中文亂碼的問題首先就是要同一字符集,我采用utf-8。

          第一步:安裝mysql后,修改配置文件/etc/mysql/my.cnf 找到相應項并添加如下字段,如下所示:(注意是添加,配置文件中其他不相關的內容下面并沒有列出來)

          [client]

          default-character-set=utf8

          [mysqld_safe]

          default-character-set=utf8

          [mysqld]

          default-character-set=utf8

          [mysql]

          default-character-set=utf8

          重新啟動mysql服務,進入sell終端,進入mysql的命令提示符下輸入如下指令:

          mysql>show variables like '%char%';

          如果出現的列表各項內容和以下相同表明配置成功了,

          +---------------------+---------------------

          | Variable_name | Value

          +-----------------------+---------------------

          | character_set_client | utf8

          | character_set_connection | utf8

          | character_set_database | utf8

          | character_set_filesystem | binary

          | character_set_results | utf8

          | character_set_server | utf8

          | character_set_system | utf8

          | character_sets_dir | /usr/share/mysql/charsets/

          +---------------------+----------------------

          第二步:在要發送中文或者要讀取中文的JSP頁面(最好所有頁面)都添加如下聲明:

          <%@page pageEncoding="UTF-8"%>

          <%@ page contentType="text/html;charset=utf-8"%>

          <% request.setCharacterEncoding("utf-8"); %>

          <head>標簽對中添加如下:

          <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

          注意在servlet中對請求進行響應的方法中同樣要有:

          response.setContentType("text/html;charset=utf-8");


          第三步:(由于不明原因firefox發送的請求仍然是latin1的時候執行這一步)

          在將請求的參數插入數據庫之前還要再執行一次轉碼(latin1編碼轉換為utf-8),例如:

          String utf8_str = new String( latin_str .getBytes("latin1"),"utf-8");

          這一步可以寫在一個過濾器中,不怕麻煩也可以在每一次在將請求數據插入之前都進行一次轉碼。


          另外:在連接數據庫的時候可以不用加上字符集參數了,直接用用戶名和密碼連接就可以了,如連接:

          con=DriverManager.getConnection("jdbc:mysql://localhost:3306/數據庫名","用戶名","密碼");

          posted on 2007-01-14 20:04 銀河海盜 閱讀(2056) 評論(0)  編輯  收藏 所屬分類: WEB

          主站蜘蛛池模板: 金沙县| 徐汇区| 平阳县| 舟山市| 井研县| 汝南县| 江津市| 苍山县| 石家庄市| 吉木萨尔县| 汉阴县| 安阳市| 河曲县| 北票市| 安义县| 渝中区| 松潘县| 黄平县| 中方县| 邹城市| 广昌县| 阿鲁科尔沁旗| 策勒县| 鹤庆县| 蓝山县| 辽阳县| 石家庄市| 施秉县| 东乡县| 唐海县| 夏津县| 沁水县| 天等县| 济宁市| 巫山县| 宁强县| 额济纳旗| 金门县| 防城港市| 遵义市| 彭山县|