为何我读取MySQL数据库字段内容显示的是乱码?

tianlei521 2004-08-23 01:59:41
小弟用jsp连接MySQL数据库,显示的却都是???????????,很有规则,又不像是乱码,全是问号。但是在MySQL的环境下显示却很正常,请问怎么回事?下面是连接的代码!

<%@ page contentType="text/html;charset=GB2312"%>
<%@ page import="java.sql.*"%>
<html>
<body>
<%
Class.forName("org.gjt.mm.mysql.Driver").newInstance();
String url="jdbc:mysql://localhost/test?user=root&password=&useUnicode=true&characterEncoding=GB2312";
Connection conn= DriverManager.getConnection(url);
Statement stmt=conn.createStatement
(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select * from system_config";
ResultSet rs=stmt.executeQuery(sql);
while(rs.next()) {%>
您的第一个字段内容为:<%=rs.getString(3)%>
您的第二个字段内容为:<%=rs.getString(4)%>
<%}%>
<%out.print("数据库操作成功,恭喜你");%>
<%rs.close();
stmt.close();
conn.close();
%>
</body>
</html>
...全文
300 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
swiminthesea 2004-08-23
  • 打赏
  • 举报
回复
可以写一个函数,在数据库读出来时调用一次
public static String GBKConverter(String str){
if(str==null){
str ="" ;
}
else{
try {
str = new String(str.getBytes("ISO8859_1"),"GBK") ;
}
catch (Exception ex) {

ex.printStackTrace();
}
}
return str ;
}
hmilyxyz 2004-08-23
  • 打赏
  • 举报
回复
哈,遇到了和我一样的问题,直接在Mysql里面把你要访问的字段设定为binary就OK了!
sageee 2004-08-23
  • 打赏
  • 举报
回复
String url="jdbc:mysql://localhost/test?user=root&password=&useUnicode=true&characterEncoding=GBK";

这样再试一下
aoplo 2004-08-23
  • 打赏
  • 举报
回复
new String(rs.getString(3).getBytes("ISO-8859-1"),"gb2312")
转码!
AgathaZ 2004-08-23
  • 打赏
  • 举报
回复
你先看一下你数据库里是不是乱码,如果是的话,怎么转也没有用

在读数据的时候最好转一下码
其实要因事而做,对付乱码问题无非有那么几种情况,不要急,一个一个的试,总会试出来的
上网多搜搜这方面的资料吧!
fatcatman 2004-08-23
  • 打赏
  • 举报
回复
或者:
<%@ page contentType="text/html;charset=GB2312"%>
<%@ page import="java.sql.*"%>
<html>
<body>
<%
Class.forName("org.gjt.mm.mysql.Driver").newInstance();
String url="jdbc:mysql://localhost/test?user=root&password=&useUnicode=true&characterEncoding=GB2312";
Connection conn= DriverManager.getConnection(url);
Statement stmt=conn.createStatement
(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select * from system_config";
ResultSet rs=stmt.executeQuery(sql);
String temp="";
while(rs.next()) {
temp=new String(rs.getString(3).getBytes("ISO-8859-1"),"gb2312");%>
您的第一个字段内容为:<%=temp%>
<%temp=new String(rs.getString(4).getBytes("ISO-8859-1"),"gb2312");%>
您的第二个字段内容为:<%=temp%>
<%}%>
<%out.print("数据库操作成功,恭喜你");%>
<%rs.close();
stmt.close();
conn.close();
%>
</body>
</html>
fatcatman 2004-08-23
  • 打赏
  • 举报
回复
你可能读出来的数据是UTF编码,要转换成GB2312才行,你看一下用这个代码可以不:

<%@ page contentType="text/html;charset=GB2312"%>
<%@ page import="java.sql.*"%>
<html>
<body>
<%
public String toGB(String str) throws IOException
{
str = new String(str.getBytes("ISO-8859-1"),"gb2312");
return str;
}
Class.forName("org.gjt.mm.mysql.Driver").newInstance();
String url="jdbc:mysql://localhost/test?user=root&password=&useUnicode=true&characterEncoding=GB2312";
Connection conn= DriverManager.getConnection(url);
Statement stmt=conn.createStatement
(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select * from system_config";
ResultSet rs=stmt.executeQuery(sql);
while(rs.next()) {%>
您的第一个字段内容为:<%=toGB(rs.getString(3))%>
您的第二个字段内容为:<%=toGB(rs.getString(4))%>
<%}%>
<%out.print("数据库操作成功,恭喜你");%>
<%rs.close();
stmt.close();
conn.close();
%>
</body>
</html>
tianlei521 2004-08-23
  • 打赏
  • 举报
回复
这样不行的!
david_chenyusi 2004-08-23
  • 打赏
  • 举报
回复
不要用Statement,用PreparedStatement类型试试
EdifierX 2004-08-23
  • 打赏
  • 举报
回复
<%@ page contentType="text/html;charset=GBK"%>
试试

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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