求救 数据库中内容正常,可通过java提出来输出到控制台之后就全是乱码了

图片说明

数据库的内容是由朋友写的爬虫爬取出来的内容,汉字部分一切正常

图片说明


图片说明

上面两个图是数据库中表的属性,似乎已经全部设置成utf8了,

java debug和以及java文件和工程编码之类的也都调成utf8了。

但一由java提取出来并且输出到控制台测试之后就全变成乱码了

图片说明

代码应该也没问题,很头疼,求大神指导!拜托!万分感谢,代码如下

public static final String url = "jdbc:mysql://localhost:3306/test?&useUnicode=true&characterEncoding=utf8&autoReconnect=true&failOverReadOnly=false";
public static final String name = "com.mysql.jdbc.Driver";
public static final String user = "root";
public static final String password = "*********";

public Connection conn = null;
public PreparedStatement pst = null;

public MySQLConnect(String sql) {
    try {
        Class.forName(name);// 指定连接类型
        conn = DriverManager.getConnection(url, user, password);// 获取连接
        pst = conn.prepareStatement(sql);// 准备执行语句
    } catch (Exception e) {
        e.printStackTrace();
    }
}

public void close() {
    try {
        this.conn.close();
        this.pst.close();
    } catch (SQLException e) {
        e.printStackTrace();
    }
}

static String sql = null;  
static MySQLConnect db1 = null;  
static ResultSet ret = null;  

public static void main(String[] args) {  
    sql = "select *from test";//SQL语句  
    db1 = new MySQLConnect(sql);//创建DBHelper对象  

    try {  
        ret = db1.pst.executeQuery();//执行语句,得到结果集  
        while (ret.next()) {  
            String uid = ret.getString(1);  
            String ufname = ret.getString(2);  
            String ulname = ret.getString(3);  
            String udate = ret.getString(4);  
            System.out.println(uid + "\t" + ufname + "\t" + ulname + "\t" + udate );  
        }//显示数据  
        ret.close();  
        db1.close();//关闭连接  
    } catch (SQLException e) {  
        e.printStackTrace();  
    }  
}  

}

编码集的问题,数据库和你的java中的编码不一致,首先你要确认你数据库的编码,然后对比,看问题结果

数据库原本是utf-8,连接字符串不要使用useUnicode=true只需要characterEncoding=utf8

可能是你tomcat的字符集问题,修改成utf8即可

你看下你的eclipse中的编码

jdbc:mysql://localhost:3306/test?&characterEncoding=UTF-8