也談MYSQL資料庫的中文問題

來源:互聯網
上載者:User
中文顯示問題一直是困擾我們的一個難題,不信你上google搜尋一下,這類的問題和解答可以說是鋪天蓋地,好多網站甚至將其提出來作為專題來討論,管中窺豹,可見一斑。

開始也曾為這個問題頭疼,上網查閱大量的資料和解決方案,終於找到了一種既簡單又好用的辦法,以JSP+MYSQL儲存為例,簡單介紹一下。

配置:
W2K+Resin+Mysql

當頁面<%@ page contentType="text/html;charset=gbk"%>使用GBK(或者GB2312)編碼後,頁面中的中文都可以正常顯示(<%out.println("能正常顯示中文嗎?");%>)。但是涉及到資料庫的存取時,您常常會看到令人頭疼的亂碼。輸出SQL執行的字串,例如:insert into table values('1','旺財','20','男'); 這時候可以看到顯示的都是中文,但是當你開啟資料庫查看記錄的時候看到還是亂碼,暈!為什嗎?如果這時候你從MYSQL控制台命令列下輸入上面的語句執行時,再查看資料庫記錄,咦!沒有問題呀,執行同樣的語句,為什麼得到不一樣的結果呢?看來JDBC是難脫其咎了。

簡而言之解決方案:
串連資料庫時:jdbc:mysql://localhost/test?user=root&password=&useUnicode=true&characterEncoding=ISO-8859-1",指明編碼為ISO-8859-1,我看了一下MYSQL的相關檔案,它預設的編碼就是ISO-8859-1,但是在這裡不指明的話還是有問題,中文仍舊不能正常顯示(到底為什麼其實我也不是很清楚)。這樣在往資料庫中存放的時候就正常了。

從資料庫中讀取資料時,如果用rs.getString("name")的話,亂碼又出來了,這還是一個編碼轉換的問題,下面給一個轉換函式:

<%
/********************************************
 函數名:toGB
 作  用:將ISO8859字元集轉換為GB2312字元集
         解決資料庫中文顯示問題
 參  數:iso ----要轉換的字串
 傳回值: gb ----轉換後的字串
********************************************/
%>
<%! public String toGB(String iso)
{
  String gb=null;
  if (iso != null) {
try {
gb=new String(iso.getBytes("ISO-8859-1"),"GB2312");
} catch (Exception e) {
gb=null;
}
  }
 return gb;
}
%>

從資料庫中讀取資料時toGB(rs.getString("name"),那麼資料庫中的中文就會正常顯示了。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.