本来是件很简单的事情.java通过mysql的driver连接mysql数据库.然后通过show create table取得建表语句.
但实际操作起来就很崩溃,到处都有字符集,操作系统有charset,java有charset,driver有charset,mysql有charset,连接有charset,结果有charset,这么多charset .....
其实本来这些都还算好说,而且根据自己的理解和以往的经验,处理这些其实也没啥难度.自以为信心满满的时候却傻眼了....
取表中的中文数据,很正常,直接就取到了中文.一点弯路都没走,本以为万事大吉,但是执行show create table xxx的时候却发现.当表定义中包含中文字符的时候.竟然是乱码......TNND.
没关系,不就是转码么.... 不怕不怕..
写了一个三层的循环,用遍了各种的字符集,各种连接字符集,latin1,gbk,utf8,各种字符集互相转换iso-8859-1,gbk,utf8,全部都跑了一遍........ MD,竟然还是乱码,一个正常的都没有...
为啥mysql终端,mysql各自工具取到的都是正常的中文呢? 百思不得其解......
最后.... 换了一下API
String sql = "show create table `test`.`z_cn_comment`";
ResultSet rs = con.DBGet(sql);
if(rs.next())
{
String createSQL = rs.getString(2);
}
中的
String createSQL = rs.getString(2);
换成了
String createSQL = null;
BufferedReader br = new BufferedReader(new InputStreamReader(rs.getAsciiStream(2),"GBK"));
while( (createSQL = br.readLine()) != null )
System.out.println(createSQL);
这个世界立刻就和谐了.....
原因待查.估计是Java在数据接收到后做了预处理...
本文记录了一次使用Java通过MySQL的Driver连接数据库并获取表结构过程中遇到的中文乱码问题。作者尝试了多种字符集设置仍无法解决问题,最终通过更换API调用方式成功解决了乱码现象。
657

被折叠的 条评论
为什么被折叠?



