本博客是为了解决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.iyunv.com/art/200906/130425.htm这个网址上看到了一个例子,将这个例子运行之后,中文不乱码,于是我对比了之前乱码的那个代码,发现这句是多余的,
name = new String(name.getBytes("ISO-8859-1"),"GB2312");
去掉这句之后,再运行之前那个代码发现中文乱码的问题解决了~~~