開發環境是:XP-sp2,Tomcat5.0,jdk1.42,mysql4.0.21-nt
在玩jsp時發現,jsp把中文資料存入mysql或者從mysql讀取出來顯示的是亂碼,無語,用百度搜了很多資料,解決問題。現總結一下。
解決方案一:
串連mysql時(無論在從mysql讀還是取資料的情況),指定使用的編碼方式為gb2312,具體代碼如下
//裝載mysql-jdbc驅動
Class.forName("com.mysql.jdbc.Driver").newInstance();
//串連資料庫
Connection sqlCon = DriverManager.getConnection( "jdbc:mysql://localhost:3306/test?user=root&password=1&useUnicode=true&characterEncoding=gb2312" );
解決方案二:
如果方法一不行那麼在方法一的基礎上對讀入的字串進行強制編碼方式轉換。
程式碼範例如下:
String name = rst.getString("name");
name= new String(name.getBytes("ISO-8859-1"),"gb2312");
註:代碼也可以為:String name =new String( rst.getString("name").getBytes("ISO-8859-1"),"gb2312"));其中rst為返回的resultset,ISO-8859-1為mysql預設的編碼方式,代碼的目的是把以ISO-8859-1的編碼轉換為gb2312編碼方式,這樣強制轉換,可以解決一部分問題,如果結合方法一,應該可以解決中文亂碼問題。
解決方案三:
這個方法在有些文章裡是首推的,我首先也是試了這個方法,但是好像不行。這裡還是說一下,不知是不是我操作錯誤。還是先貼原文吧:
"如果資料庫中有中文的話而mysql預設的語言不是中文時要在設定檔C:winntmy.ini 中的 [mysqld] 裡添加一行:
default-character-set=gbk
然後重起mysql"(原文地址:http://www.blogdriver.com/blog/tb.b?diaryID=338894)
我的是xp系統,所以my.ini在C:WINDOWS下,用editplus開啟,沒有修改過的代碼如下:
......
[mysqld]
basedir=E:/Program Files/mysql
#bind-address=192.168.0.150
......
[WinMySQLadmin]
Server=E:/Program Files/mysql/bin/mysqld-nt.exe
......
按照原文所說的,修改配置代碼如下:
......
[mysqld]
basedir=E:/Program Files/mysql
default-character-set=gbk
#bind-address=192.168.0.150
......
[WinMySQLadmin]
Server=E:/Program Files/mysql/bin/mysqld-nt.exe
......
然後重啟winmysqladmin.exe
如果沒有方法一和二為基礎的話,用這個方法我試過不行。有了方法一和二,即使不用方法三,我也解決了中文讀寫的亂碼問題。
最後,別忘了在jsp中聲明:
contentType="text/html;charset=gb2312"