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

在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();

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值