在使用JDBC連接MySQL數(shù)據(jù)庫時,需要考慮字符集的設(shè)置。在建立連接時,可以通過設(shè)置字符集來指定連接的編碼方式。常見的編碼方式有UTF-8、GBK、Latin1等。
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8";
Connection conn = DriverManager.getConnection(url, "root", "123456");
上述代碼中,連接字符串包含了兩個查詢參數(shù):useUnicode和characterEncoding。useUnicode設(shè)置為true表示使用Unicode編碼方式,而characterEncoding則指定了使用的字符集為UTF-8。這樣,建立的連接就使用了UTF-8字符集。
如果不設(shè)置字符集,可能會導(dǎo)致在處理非ASCII字符時出現(xiàn)亂碼。例如,將一個包含中文字符的字符串插入到數(shù)據(jù)庫中,如果數(shù)據(jù)庫字符集為GBK而連接的字符集為UTF-8,則插入后在GBK字符集下可能無法正確顯示。而如果數(shù)據(jù)庫字符集和連接字符集都為UTF-8,則不會出現(xiàn)亂碼問題。
在Java程序中,字符串默認使用Unicode編碼方式。因此,如果需要將字符串插入到數(shù)據(jù)庫中,可以先將其轉(zhuǎn)換為指定字符集的字節(jié)數(shù)組,再插入到數(shù)據(jù)庫中。例如:
String str = "你好,世界!";
byte[] bytes = str.getBytes("UTF-8");
PreparedStatement ps = con.prepareStatement("INSERT INTO t_test(name) VALUES(?)");
ps.setBytes(1, bytes);
ps.executeUpdate();
上述代碼中,將字符串轉(zhuǎn)換為UTF-8編碼的字節(jié)數(shù)組后,將其作為參數(shù)插入到數(shù)據(jù)庫中。同時,在查詢數(shù)據(jù)時,也需要考慮字符集的設(shè)置。例如:
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM t_test");
while(rs.next()){
byte[] bytes = rs.getBytes("name");
String str = new String(bytes, "UTF-8");
System.out.println(str);
}
在查詢到字節(jié)數(shù)組后,需要將其轉(zhuǎn)換為字符串,同樣需要指定字符集為UTF-8。