环境:
开发环境:Windows + jdk1.6
weblogic:Windows 下weblogic10.3
数据库:Unix 下oracle 10g  字符编码为NLS_CHARACTERSET=ZHS16GBK 情况这样,使用java先查询一个表a的数据,因为b表要使用a表的某些字段,故做一些操作,将b表实体类的一些字段的值set为a表中相应字段的值,然后在插入到oracle的b表中。其中a和b均有itemname这个字段,数据库中设置的长度为120字节。其中有一条数据itemname为38个汉字,但是在插入的时候报异常如下:
java.sql.SQLException: ORA-12899: value too large for column "CCICCIRC"."STATMONTHVALUE"."ITEMNAME" (actual: 133, maximum: 120)注:STATMONTHVALUE 相当于b表

解决方案 »

  1.   

    字符集都是GBK的,再插入数据库前,我把itemname字段的各编码的长度输出:
    iso-8859-1=38
    gbk=72
    utf-8=114
      

  2.   

      select lengthb('汉') from   dual;测试汉字字节长度,另外你也可以在测试库上手工执行你的SQL看能不能插进去,看看是你的Java还是你的数据库问题。
      

  3.   

    我单独写了一个简单的java类  就专门插入那个字段,没有问题。能插入进去,在pl/sql插入也没有问题。
      

  4.   

    select lengthb('汉') from dual;  2
      

  5.   


    初步判断,你这个跟weblogic有关,它可能内部将你的字符串转为utf-8了,你的38个汉字,弄成utf-8估计就超标了。如果是纯jdbc程序,相信不会有此问题。你可以采用字符串长度*4的策略设计字段长度。
      

  6.   

    我也怀疑是weblogic10造成,因为原先我使用weblogic7+jdk1.3,是没有这个问题的,同样的程序用jdk1.6+weblogic10.3后就出现这个问题了。用纯jdbc是没有问题的,我测试过了
      

  7.   


    那基本上就是weblogic的问题了。既然这样,还是采用*4的策略吧。
      

  8.   

    那weblogic内部是怎样转换的呢?为什么38个汉字得出133个字节了!