jdbc取mysql数据库中文乱码问题,求大神解惑!
mysql字符集:
mysql> show variables like 'character%';
+--------------------------+------------------------------------------------+
| Variable_name | Value |
+--------------------------+------------------------------------------------+
| character_set_client | gbk |
| character_set_connection | gbk |
| character_set_database | gbk |
| character_set_filesystem | binary |
| character_set_results | gbk |
| character_set_server | gbk |
| character_set_system | utf8 |
| character_sets_dir | D:\soft\MySQL\MySQL Server 5.0\share\charsets\ |
+--------------------------+------------------------------------------------+
Java项目编码格式为GBK
jdbc连接代码:
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/gamedb?useUnicode=true&characterEncoding=GBK;";
String userName = "root";
String passWord = "root";
conn = DriverManager.getConnection(url, userName, passWord);
其中url那里无论有无characterEncoding这个以及characterEncoding值设为GBK、utf-8 等,在取数据的时候都是乱码
sql取数据时:
public static Object[][] executeQuery(Connection conn, String sql,
Object[] param) {
PreparedStatement pstm = null;
ResultSet rs = null;
List<Object[]> ret = new ArrayList<Object[]>();
try {
pstm = conn.prepareStatement(sql);
if (param != null && param.length > 0) {
for (int i = 0; i < param.length; i++) {
pstm.setObject(i + 1, param[i]);
}
}
rs = pstm.executeQuery();
if (rs != null) {
int column = rs.getMetaData().getColumnCount();
while (rs.next()) {
Object[] obj = new Object[column];
for (int i = 0; i < column; i++) {
obj[i] = rs.getObject(i + 1);
//下面打印的时就是问号了,实际上我调试到这里发现rs中存的数据就是问号(也就是ascii码的63)
System.out.println(new String(obj[i].toString().getBytes("ISO8859_1"),"GBK"));
System.out.println(new String(obj[i].toString().getBytes("ISO8859-1"),"GBK"));
}
ret.add(obj);
}
}
} catch (Exception e) {
LogInfo.info(
"DBOperation.executeQuery(conn,sql,param): "
+ e.getMessage(), DBOperation.class);
} finally {
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (pstm != null) {
try {
pstm.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
return ret.toArray(new Object[0][0]);
}
求大神解惑啊,要疯了,百度找遍了也没找到解决方案。。。。
另我的系统是window xp系统
我感觉就是取出的数据就已经是??了,是什么问题呢?