mysql的数据存放是按单字节的,你应该在insert前先转为ISO-8859-1。

解决方案 »

  1.   

    我也遇到过
    我是用jdbc over odbc就能写进去中文
    用jdbc for mysql就写不进去
      

  2.   

    我看了mysql支持的字符集,latin1 big5 czech euc_kr gb2312 gbk latin1_de sjis tis620 ujis dec8 dos german1 hp8 koi8_ru latin2 swe7 usa7 cp1251 danish hebrew win1251 estonia hungarian koi8_ukr win1251ukr greek win1250 croat cp1257 latin5
      

  3.   

    不行。转为ISO-8859-1插入的数据全变成???了。
      

  4.   

    现在好了。是转为iso-8859-1就好了。  public boolean UpdateField(ResultSet resultset, String FieldName, String FieldValue) {
        boolean Result = false;
        try {
          String str = new String(FieldValue.getBytes("GB2312"),"ISO-8859-1");//就是他。
          System.out.println("Value: "+str);
          resultset.updateString(FieldName,str);
          Result = true;
        }catch(Exception e){
          System.out.println(this.getClass()+"UpdateField()"+e.toString());
        }
        return Result;
      }
      

  5.   

    不过。怪事情有出现了。现在读取、写入都正常了。可是我使用ResultSet.deleteRow()方法,无法删除数据!删除数据的方法:
      ResultSet rs;
      rs.deleteRow();无法删除的数据:
        >主关键字段值是汉字。
        >如果关键字段值是英文字母可以用上面的方法删除。
        >如果关键字段值是英文字母其他字段值是汉字,也可以删除。现象:
        设定rs只打开了一条数据,在调用rs.deleteRow()方法后,立即调用rs.GetString(1),抛出SQL到了数据末尾的异常。证明删除成功。
       于是设定Connection.autoCommit=false.在删除后手都提交,数据库仍然没有更新。请高手们再次指教。
      

  6.   

    谢谢rootwuyu(wuyu) 和楼上兄弟们的回答。
      

  7.   

    我的解决:
    webserver:tomcat 3.2
    db:MySQL
    jdbc driver:mm.MySQL JDBC
    IDE:JB61.jsp页面有<%@ page contentType="text/html; charset=GBK" %>
    2.jb6 project编码方式default(有系统决定)
    3.通过jsp页面提交的表单参数,在通过request.getParameter获得后,进行编码转换,代码片断:
    ...
    String param = request.getParameter("param");
    try{
       byte[] bytes = param.getBytes("iso-8859-1");
       param = new String(bytes);
    }catch(Exception e){
    }
    4.然后再使用jdbc,对数据库update5.从数据读出数据,不用编码转换
      

  8.   

    mysql支持中文的,你不必非用ISO8859,要让mysql支持中文你需要:
    1. 在mysql配置文件中配置default charset:default-character-set = gbk
    2. 在jdbc连接时声明使用gb2312或gbk://host:3306/dbname?user=username&password=pass&useUnicode=true&characterEncoding=GBK
      

  9.   

    to: jimjxr(宝宝猫)
      我按照你的方法作了。可是问题还是没哟解决呵。如果不用
    String  str  =  new  String(FieldValue.getBytes("GB2312"),"ISO-8859-1");
    转化,数据库就去不出数据来。看来,我的mysql还没有能支持中文?
      

  10.   

    另外,我的\mysql\share\charsets\下面,没有gb2312的配置文件。
      

  11.   

    处理起来真是麻烦。这是不是和JDK的语言版本有关呢?
      

  12.   

    在my.ini设置好default-character-set  =  gb2312之后,你可以这样测试以下:
      读书据:
       String data = new String(rs.GetString(1).getByte("GB2312"),"GB2312");
      显示数据的页面设置为
    <%@page contentType="text/html;charset=GB2312"%>正常显示表明数据库的字符集就是GB2312
      

  13.   

    这样测试能通过。但是,我发现问题是这样的:1)我使用ResultSet.getString()去数据的时候,取出的数据是gb2312编码。
    2)GB2312编码方式的页面提交数据数据之后,使用ResultSet.setString()方法写入未经转换的数据,数据库中一堆乱码。如果使用从gb2312向is0-8859-1编码转换,那么数据写入就正常。这是什么意思????难道是jdbc驱动的问题?我用的是gjt.mm.mysql.Driver最新的驱动啊。