最近洒家忙昏了,为了便于安装和打包,决定把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转来转去都没用。
请问各位我还有什么地方没考虑到的?