关于java连接数据库mysql时出现乱码的问题

本博客是为了解决java连接mysql数据库时遇到中文乱码的问题。
在用数据库mysql中插入中文不乱码,但是用java连接数据库时就出现中文乱码的问题。
刚接触mysql的时候,就从网上找了个例子:
import java.sql.*;

public class JDBCTest {

public static void main(String[] args){

// 驱动程序名
String driver = "com.mysql.jdbc.Driver";

// URL指向要访问的数据库名scutcs
String url = "jdbc:mysql://127.0.0.1:3306/scutcs";

// MySQL配置时的用户名
String user = "root";

// MySQL配置时的密码
String password = "123456";

try {
// 加载驱动程序
Class.forName(driver);

// 连续数据库
Connection conn = DriverManager.getConnection(url, user, password);

if(!conn.isClosed())
System.out.println("Succeeded connecting to the Database!");

// statement用来执行SQL语句
Statement statement = conn.createStatement();

// 要执行的SQL语句
String sql = "select * from student";

// 结果集
ResultSet rs = statement.executeQuery(sql);

System.out.println("-----------------------");
System.out.println("结果如下所示:");
System.out.println("-----------------------");
System.out.println(" 学号" + "\t" + " 姓名" + "\t" + " 性别");
System.out.println("-----------------------");

String name = null;
String sex = null;

while(rs.next()) {

// 选择sname这列数据
name = rs.getString("sname");
sex = rs.getString("sex");

// 首先使用ISO-8859-1字符集将name解码为字节序列并将结果存储新的字节数组中。
// 然后使用GB2312字符集解码指定的字节数组
name = new String(name.getBytes("ISO-8859-1"),"GB2312");
sex = new String(sex.getBytes("ISO-8859-1"),"GB2312");


// 输出结果
System.out.println(rs.getString("sno") + "\t" + name + "\t" +sex);
}

rs.close();
conn.close();

} catch(ClassNotFoundException e) {


System.out.println("Sorry,can`t find the Driver!");
e.printStackTrace();


} catch(SQLException e) {


e.printStackTrace();


} catch(Exception e) {


e.printStackTrace();


}
}
}

但是执行这段代码之后,只要是有中文的地方就被替换成了??,于是又上网找解决方法,很多地方都说是因为编码的问题,于是,我把MySQL.Server 下的my.ini文件下的
[client]下的
default-character-set=gbk改为default-character-set=utf-8
[mysqld]下的
character-set-server=gbk改为character-set-server=utf-8
重新开启数据库的时候,提示说error,具体错误见附件的图。
然后我又把编码改回gbk。
有人说在数据库的url上指定一下编码,即在这句
Connection conn = DriverManager.getConnection(url, user, password);
改为
Connection conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=GBK",user,password);
又重新运行java代码,可是发现中文还是乱码。
有人说可能是驱动不支持中文
所以我又下了好几个驱动并配置了环境变量,可是运行上面的代码还是中文乱码。
后来在http://developer.51cto.com/art/200906/130425.htm这个网址上看到了一个例子,将这个例子运行之后,中文不乱码,于是我对比了之前乱码的那个代码,发现这句是多余的,
name = new String(name.getBytes("ISO-8859-1"),"GB2312");
去掉这句之后,再运行之前那个代码发现中文乱码的问题解决了~~~
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值