LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1926|回复: 7

java+mysql无法正常存储和读取中文字符的问题

[复制链接]
发表于 2004-7-21 10:50:48 | 显示全部楼层 |阅读模式
最近,用java+mysql开发一个存储和处理票据的应用程序,在向数据库存储和读取中文是出现了乱码问题:
开发环境:
os:windows xp  
java:j2sdk1.4.2_05
db:mysql 4.0.17
jdbc: mysql-connector-java-3.0.9-stable
mysql以及java的编程环境配置完毕后,建立了一个测试数据库Query,其中只有一张表:test(id char(15),name char(10))

向其中插入了若干条数据后,写了一个LoadDriver测试类:代码如下,由于类的
内容本身比较简单所以就不加入其它注释,仅在遇到问题时,标出注释:

import java.sql.SQLException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.*;
import java.sql.SQLException;

public class LoadDriver {

    public static void main(String [] args){
        Statement stmt=null;
        ResultSet rs=null;
        int i;
        try{
            Class.forName("com.mysql.jdbc.Driver").newInstance();
            Connection con=DriverManager.getConnection  ("jdbc:mysql://localhost/test?user=root&password=821008)");

            stmt=con.createStatement();

            i=stmt.executeUpdate("INSERT into Query.test (id,name)  values ('01','lu')");
  //按照现在的输入一切正常,但是如果把'lu'换成'路'则数据库中显示为乱吗
  //数据读取时也遇到同样问题
            System.out.println("Success!");
        } catch(ClassNotFoundException ex){
            System.out.println("There is not such driver.");
        }catch(Exception ex){
            System.out.println("There is something wrong!");
        }
    }
}
// end class
刚刚接触jdbc,还是新手,遇到问题后,我上网找了一些资料,但是大部分讲的含混不清,请这方面的高手指点迷津,50分送出
发表于 2004-7-21 11:22:51 | 显示全部楼层

回复: java+mysql无法正常存储和读取中文字符的问题

最初由 linuxstar 发表
刚刚接触jdbc,还是新手,遇到问题后,我上网找了一些资料,但是大部分讲的含混不清,请这方面的高手指点迷津,50分送出  
  

:ask :ask :ask :ask

useUnicode=true&characterEncoding=GBK
 楼主| 发表于 2004-7-21 12:36:21 | 显示全部楼层
能不能稍微详细些,我改成这样:
Connection con=DriverManager.getConnection ("jdbc:mysql://localhost/test?"+
  "user=root&password=821008"+
  "&useUnicode=true&characterEncoding=GBK");

结果,出现异常,数据库都无法访问了,
发表于 2004-7-21 13:24:15 | 显示全部楼层
sorry,这个可能是你所用的mysql驱动的一个bug

你换成 GB2312 试试?
 楼主| 发表于 2004-7-21 13:37:31 | 显示全部楼层
现在数据库可以访问了,但是插入的还是乱码
我把插入的字符串作了如下处理,结果还是不行
s=new String(info.getBytes("gb2312"),"iso8859_1");
发表于 2004-7-21 13:49:35 | 显示全部楼层
在写入的连接中 不要加入useUnicode=true&characterEncoding=gb2312

在读取的连接中加入useUnicode=true&characterEncoding=gb2312

试试?
 楼主| 发表于 2004-7-21 16:53:53 | 显示全部楼层
谢谢你的热心,
在写入的url加上那句话,然后把要输入的字符串作如下转换:
String s=new String("谢谢谢谢");
String ss=new String(s.getBytes(),"UTF-8");

然后写入数据库,不会出现乱码,但是非常奇怪的是如果字符串是四个字,如“谢谢谢谢”,把ss打印到控制台,或是把ss写入数据库都没问题,但是如果字符串为3个字如“谢谢谢”,那么打印出来的ss或是写道数据库中的ss都显示成“谢谢??“真是实在不知道为什么了!
发表于 2004-7-22 09:40:15 | 显示全部楼层
其实在连接串中指定了字符集和unicode后,插入数据操作就可直接进行了,无须再字符转换了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表