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

          主站蜘蛛池模板: 北碚区| 吉林市| 竹北市| 和顺县| 迁安市| 定安县| 阳谷县| 南昌市| 卓尼县| 绍兴市| 甘孜县| 乃东县| 拉萨市| 泰宁县| 小金县| 永川市| 永春县| 卢氏县| 昌邑市| 友谊县| 汽车| 营山县| 京山县| 临泉县| 昌黎县| 伊宁市| 康马县| 辉县市| 和平区| 四川省| 包头市| 麻栗坡县| 唐河县| 会宁县| 宁阳县| 名山县| 金昌市| 天气| 东乌珠穆沁旗| 丹江口市| 兴山县|