您的位置:首页 > 数据库 > MySQL

jdbc连接FreeBsd上的mysql数据库中文发生乱码的解决办法

2008-04-01 21:58 761 查看
在FreeBSD上安装数据库的时候没有把gbk安装上去,结果从windows系统上备份过来的mysql数据库不能导入到freebsd的mysql上,查找问题,结果是windows上采用的是gb2312的编码方式而在freebsd上的mysql却没有这种编码方式,只能打开Windows上的备份文件修改其中的DEFAULT CHARACTER SET gb2312修改成utf8这样才能把文件导入到freebsd的mysql中。

导入完毕后用ECLIPSE作了一个小程序用jdbc连接mysql中的数据库。结果发现是乱码。

在freebsd系统下查看mysql的status

mysql> status;
--------------
mysql Ver 14.7 Distrib 4.1.18, for portbld-freebsd6.1 (i386) using 5.0

Connection id: 52
Current database: schoolmis
Current user: root@localhost
SSL: Not in use
Current pager: more
Using outfile: ''
Using delimiter: ;
Server version: 4.1.18-log
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: latin1
Db characterset: latin1
Client characterset: latin1
Conn. characterset: latin1
UNIX socket: /tmp/mysql.sock
Uptime: 1 hour 17 min 51 sec

Threads: 2 Questions: 494 Slow queries: 0 Opens: 44 Flush tables: 1 Open tables: 19 Queries per second avg: 0.106
--------------
原来MySQL的默认编码了,一般不调整的话为latin1其实和ISO8859_1一样,所以在读取这些字符的时候要进行处理否则就会产生乱码

try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection con = DriverManager
.getConnection("jdbc:mysql://10.33.250.2/schoolmis?user=sa&password=sa&useUnicode=true&characterEncoding=utf8");
Statement stmt = con.createStatement();
// String strSQL="insert into student values('长城')";
// stmt.executeUpdate(strSQL);
// stmt.close();
stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("select * from ");
while (rs.next()) {
String str=new String(rs.getString("studentid").getBytes("ISO8859_1"),"GBK");
System.out.println(str);

}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
另外一种方式

当然在MySQL为latin1编码时,也可以存的时候用GBK了
Connection con=DriverManager.getConnection("jdbc:mysql://10.33.250.2:3306/user=sa&password=sa?useUnicode=true&characterEncoding=GBK");
Connection con = DriverManager
.getConnection("jdbc:mysql://10.33.250.2/schoolmis?user=sa&password=sa&useUnicode=true&characterEncoding=utf8");
Statement stmt = con.createStatement();
String strSQL="insert into student values('长城')";
stmt.executeUpdate(strSQL);
stmt.close();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: