jdbc取mysql数据库中文乱码问题,求大神解惑!

hawk_c_s_d_n 2014-09-09 10:23:53
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系统
我感觉就是取出的数据就已经是??了,是什么问题呢?
...全文
401 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
hawk_c_s_d_n 2014-09-25
  • 打赏
  • 举报
回复
问题解决了 原来是drive驱动选错了 之前选的是mysql-connector.jar这个jar包 后来换成mysql-connector-java-3.1.13-bin.jar这个就好了 希望能帮到以后遇到同样问题的同学~~~
hawk_c_s_d_n 2014-09-10
  • 打赏
  • 举报
回复
引用 2 楼 u011278496 的回复:
编码的统一,保存时候,查询时候,都统一种编码。 直接看你数据库里面是否保存时候就乱码为???了。
引用 1 楼 u013969208 的回复:
在数据库中查询下看看是不是乱码,如果是的话 在mysql安装目录MySQL Server 5.0下my.ini [client] port=3306 [mysql] default-character-set=gbk 和 default-character-set=utf8 都修改下试试, 或者 在运行 MySQL Server Instance Config Wizard重新编码配置 一般情况下,存的时候如果不是乱码的话,就是数据库编码问题,
我是直接在数据库里insert数据的的 存的是中文 数据库显示的也是正确的中文
DM_x1aoWe1 2014-09-10
  • 打赏
  • 举报
回复
出现乱码就是归结为编码格式不统一。。你可以将页面、编辑器、数据库的所有编码格式统一就不会了。
-江沐风- 2014-09-10
  • 打赏
  • 举报
回复
乱码归根结底一般都是编码不统一造成的;
LOVE-漂泊 2014-09-10
  • 打赏
  • 举报
回复
看看你页面最上面创建的是什么编码格式如果不是UTF-8可以加上 或者后台接收参数时进行编码格式转换 String value = new String (request.getParameter("name").getBytes("ISO-8859-1"),"UTF-8"); 如果以上都解决不了的话 可能是数据库编码设置问题 MYSQL一般会出现这样的问题 可以用以下方法查看编码格式 其中,character_set_client为客户端编码方式;character_set_connection为建立连接使用的编码;character_set_database数据库的编码; character_set_results结果集的编码; character_set_server数据库服务器的编码; 只要保证以上四个采用的编码方式一样,就不会出现乱码问题。
tuzuxiao 2014-09-10
  • 打赏
  • 举报
回复
查看下整个工程编码,看下数据库保存的数据是否为乱码,然后再确定乱码出现原因!建议创建数据库的时候也设置编码
sinat_19250161 2014-09-10
  • 打赏
  • 举报
回复
getBytes("ISO-8859-1"), "GBK") 是这样写的
hawk_c_s_d_n 2014-09-10
  • 打赏
  • 举报
回复
引用 5 楼 sizhouzhou 的回复:
看看你页面最上面创建的是什么编码格式如果不是UTF-8可以加上 或者后台接收参数时进行编码格式转换 String value = new String (request.getParameter("name").getBytes("ISO-8859-1"),"UTF-8"); 如果以上都解决不了的话 可能是数据库编码设置问题 MYSQL一般会出现这样的问题 可以用以下方法查看编码格式 其中,character_set_client为客户端编码方式;character_set_connection为建立连接使用的编码;character_set_database数据库的编码; character_set_results结果集的编码; character_set_server数据库服务器的编码; 只要保证以上四个采用的编码方式一样,就不会出现乱码问题。
5楼没看我贴出的内容啊 都说了项目和数据库的编码都是GBK。。。。 真没大神愿意帮忙么。。。
2.wa 2014-09-09
  • 打赏
  • 举报
回复
编码的统一,保存时候,查询时候,都统一种编码。 直接看你数据库里面是否保存时候就乱码为???了。
火柴棍的坚强 2014-09-09
  • 打赏
  • 举报
回复
在数据库中查询下看看是不是乱码,如果是的话 在mysql安装目录MySQL Server 5.0下my.ini [client] port=3306 [mysql] default-character-set=gbk 和 default-character-set=utf8 都修改下试试, 或者 在运行 MySQL Server Instance Config Wizard重新编码配置 一般情况下,存的时候如果不是乱码的话,就是数据库编码问题,

67,514

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧