代码如下:try
{
    PreparedStatement preStmt = con.prepareStatement("insert into t_bb(f_no,f_name) values(?,?)");
    preStmt.setString(1,"ABCDEFG");
    preStmt.setString(2,"中国从前有个传说");
    preStmt.executeUpdate();
}
catch(SQLException e)
{
    System.out.println(new String(e.toString().getBytes("iso-8859-1"),"utf-8"));
}执行插入数据失败后,提示如下:
Duplicate entry 'ABCDEFG-中�?��?�??�??个传说' for key 'PRIMARY'
部分中文能正常显示,而部分为乱码,这是怎么回事?

解决方案 »

  1.   

    不是从数据查出来的数据,是插入失败后捕获的异常
    GBK与GB2312没试过,如果就把程序文本的编码方式改一下,再加上代码改一下:System.out.println(new String(e.toString().getBytes("iso-8859-1"),"GBK"));
    的话,这倒是顺便试过,全是乱码。
      

  2.   

    Duplicate entry 'ABCDEFG-中�?��?�??�??个传说' for key 'PRIMARY'
    1、你的主键重复了。
    2、你看一下数据库的编码是什么,一般不转换就可以的。
    System.out.println(new String(e.toString().getBytes("iso-8859-1"),"utf-8"));
    你改为
    System.out.println(new String(e.getBytes("iso-8859-1"),"utf-8"));
    我感觉你不用转换编码,如果你项目用的就是utf8的话,你就不用转换。还有就是数据库用的是什么编码。
      

  3.   

    数据库编码 和你java的编码格式不一致,看起来像是 GBK--》UTF8 你的java 是gbk 数据库是UTF8
      

  4.   

    1、这个异常是我故意让它抛出的
    2、统一为utf-8编码,如果我正常插入的话,一切都正常。另外那个e.toString()出来的结果是一样的。
      

  5.   

    Duplicate entry 'ABCDEFG-中�?��?�??�??个传说' for key 'PRIMARY' 
    异常问题是你数据库的原因;乱码方面,有可能与你的电脑或者你的编程工具本身的编码问题,导致现实有问题!
      

  6.   

    编码与好多东西有关,比如:一般windows不会有系统编码的问题,但如果是linux/unix的话很可能有关系。第二就是eclipse中项目使用的编码是什么,右击你的项目-->properties-->resource-->text File encoding
      

  7.   

    最新进展:
    1、无论用什么编码:GBK、GB2312、UTF-8 ,数据库的中文都是正常的,就是Java这边的编码与数据库对不上也会是正常的。这可能是mySQL驱动自己做了什么转换。
    2、统一都用GBK、GB2312的啊,则没有上述问题,即抛的异常能正常显示中文
    3、统一都用UTF-8就有上述问题,就是问题还没解决。