为何我读取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>
...全文
237 点赞 收藏 10
写回复
10 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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"%>
试试
回复
相关推荐
发帖
Web 开发
创建于2007-09-28

8.0w+

社区成员

Java Web 开发
申请成为版主
帖子事件
创建了帖子
2004-08-23 01:59
社区公告
暂无公告