經(jīng)過一個星期的艱苦奮斗終于解決了這個問題,特將經(jīng)驗摘錄下來備忘。本文將解決以下的幾種亂碼問題。
中文存入
mysql
數(shù)據(jù)表出現(xiàn)的亂碼,從
JSP
頁面讀取
mysql
中文數(shù)據(jù)出現(xiàn)亂碼,以及在
sell
環(huán)境下查看數(shù)據(jù)庫表中文數(shù)據(jù)出現(xiàn)亂碼。
linux平臺:ubuntu6.10
mysql版本:5.0
瀏覽器:firefox2.0
為了解決中文亂碼的問題首先就是要同一字符集,我采用utf-8。
第一步:安裝mysql后,修改配置文件/etc/mysql/my.cnf 找到相應(yīng)項并添加如下字段,如下所示:(注意是添加,配置文件中其他不相關(guān)的內(nèi)容下面并沒有列出來)
[client]
default-character-set=utf8
[mysqld_safe]
default-character-set=utf8
[mysqld]
default-character-set=utf8
[mysql]
default-character-set=utf8
重新啟動mysql服務(wù),進(jìn)入sell終端,進(jìn)入mysql的命令提示符下輸入如下指令:
mysql>show variables like '%char%';
如果出現(xiàn)的列表各項內(nèi)容和以下相同表明配置成功了,
+----------------------+---------------------
| 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/
+---------------------+----------------------
第二步:在要發(fā)送中文或者要讀取中文的JSP頁面(最好所有頁面)都添加如下聲明:
<%@page pageEncoding="UTF-8"%>
<%@ page contentType="text/html;charset=utf-8"%>
<% request.setCharacterEncoding("utf-8"); %>
在<head>標(biāo)簽對中添加如下:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
注意在servlet中對請求進(jìn)行響應(yīng)的方法中同樣要有:
response.setContentType("text/html;charset=utf-8");
第三步:(由于不明原因firefox發(fā)送的請求仍然是latin1的時候執(zhí)行這一步)
在將請求的參數(shù)插入數(shù)據(jù)庫之前還要再執(zhí)行一次轉(zhuǎn)碼(將latin1編碼轉(zhuǎn)換為utf-8),例如:
String
utf8_str
= new String(
latin_str
.getBytes("latin1"),"utf-8");
這一步可以寫在一個過濾器中,不怕麻煩也可以在每一次在將請求數(shù)據(jù)插入之前都進(jìn)行一次轉(zhuǎn)碼。
另外:在連接數(shù)據(jù)庫的時候可以不用加上字符集參數(shù)了,直接用用戶名和密碼連接就可以了,如連接:
con=DriverManager.getConnection("jdbc:mysql://localhost:3306/數(shù)據(jù)庫名","用戶名","密碼");