今日发现mysql的一个bug

最近洒家忙昏了,为了便于安装和打包,决定把RoyalYL的数据库从postgreSqL移植到Mysql,在移植的过程中却碰到中文化的问题,下面给出我试过的一个环境和代码,希望能有人帮忙解决。

操作系统为中文win2k

mysql5.0环境:字符集gb2312,测试数据库create table test_table (test_id character varying(10));字符集gb2312

jdbc:mysql官方驱动

java version:jdk1.4

刚发现问题的时候是配的tomcat联机池,后来干脆直接写代码,代码好像下面的样子:

import java.sql.*;

public class Main {

 /**
  * @param args
  */
 public static void main(String[] args) {
    try {
     Class.forName("com.mysql.jdbc.Driver");
    } catch (ClassNotFoundException e) {
     e.printStackTrace();
    }
    try {
    Connection conn=(Connection) DriverManager.getConnection("jdbc:mysql://localhost:3206/test?useUnicode=true&characterEncoding=GB2312","root","111111");
   Statement stmt=(Statement) conn.createStatement();
   ResultSet rs=(ResultSet) stmt.executeQuery("select test_id as '字段' from test_table");
   ResultSetMetaData rsmd=(ResultSetMetaData) rs.getMetaData();
   System.out.println("字段名:"+rsmd.getColumnName(1));
   while(rs.next()){
    System.out.println("结果:"+rs.getString(1));
   }
   
  } catch (SQLException e) {
   e.printStackTrace();
  }

 }

}

输出结果:

字段名:$%*&^    (SHIT)

结果:value1

结果:值2

 

从运行结果可以看出,结果集已经是正常的中文字了,而字段名却为乱码。当为查询字段定义的别名为中文时,取得的metadata就不知道是什么码了。

为了确认问题不是因为我的无知而导致的配置错误,我还特地做了以下环境的测试,问题依旧。

jdbc驱动:mysql官方驱动3.x,5.x    mm.mysql

mysql字符集:latin1,utf,gbk,gb2312

url连接的characterEncoding参数:随mysql字符集改变

最后还不依不饶地用

String str2=new String(str1.getBytes(charset1_name),"charset2_name");

的方法把得到的columnName转来转去都没用。

请问各位我还有什么地方没考虑到的?

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值