JSP是Java Server Pages的縮寫,可以幫助我們在網(wǎng)頁上展示動態(tài)內(nèi)容。而MySQL則是一種廣為使用的關(guān)系型數(shù)據(jù)庫。在使用JSP和MySQL的過程中,有時候會發(fā)現(xiàn)寫入數(shù)據(jù)庫時出現(xiàn)亂碼的情況。如何避免這種情況的出現(xiàn)呢?以下將給出一些建議。
首先,我們需要明確一個概念,那就是字符編碼。在JSP和MySQL之間進行數(shù)據(jù)傳輸?shù)臅r候,數(shù)據(jù)的字符編碼需要統(tǒng)一。否則就容易出現(xiàn)亂碼的情況。一般情況下,我們可以在JSP頁面中加入如下代碼來設定字符編碼:
<%@ page contentType="text/html; charset=UTF-8" language="java" %>
上述代碼中的charset=UTF-8就是指定了字符編碼為UTF-8。如果你的MySQL數(shù)據(jù)庫也使用的是UTF-8編碼,那么這一步就已經(jīng)完成了。如果你的MySQL數(shù)據(jù)庫使用的是其他編碼,那么就需要在寫入數(shù)據(jù)庫時進行轉(zhuǎn)換。下面的代碼演示了如何將字符串從UTF-8編碼轉(zhuǎn)化為GBK編碼:
String str = new String("要寫入數(shù)據(jù)庫的字符串".getBytes("UTF-8"), "GBK"); PreparedStatement pstmt = conn.prepareStatement("INSERT INTO table1 (column1) values (?)"); pstmt.setString(1, str); pstmt.executeUpdate();
上述代碼中的getBytes("UTF-8")將字符串從UTF-8編碼轉(zhuǎn)化為byte數(shù)組,而后面的"GBK"則將byte數(shù)組轉(zhuǎn)化為GBK編碼。這樣就可以保證寫入數(shù)據(jù)庫時不會出現(xiàn)亂碼了。
還有一種常見的情況就是從數(shù)據(jù)庫中讀取數(shù)據(jù)時出現(xiàn)亂碼。這種情況與寫入數(shù)據(jù)庫時的原因相似,也是字符編碼不一致導致的。我們可以在讀取數(shù)據(jù)時進行轉(zhuǎn)碼,如下所示:
ResultSet res = stmt.executeQuery("SELECT * FROM table1"); while(res.next()){ String str = new String(res.getString("column1").getBytes("GBK"), "UTF-8"); out.print(str); }
上述代碼中的getString("column1")是從結(jié)果集中獲取列名為column1的字符串,后面的getBytes("GBK")將字符串從GBK編碼轉(zhuǎn)化為byte數(shù)組,而后面的"UTF-8"則將byte數(shù)組轉(zhuǎn)化為UTF-8編碼。這樣就可以保證讀取出來的數(shù)據(jù)不會出現(xiàn)亂碼了。