此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
楼主截止到2008-06-17 19:43:32的汇总数据:
发帖数:2
结贴数:0
结贴率: 0.00%
如何结贴请参考这里:http://topic.csdn.net/u/20080501/09/ef7ba1b3-6466-49f6-9d92-36fe6d471dd1.html

解决方案 »

  1.   

    System.out.println(Fizdenhed.getLnnm().length());
    换成。size()看看是多少?
      

  2.   

    我查过了..是HIBERNATE取数据的时候就有问题了..
    System.out.println(Fizdenhed.getLnnm().length虽然是24
    但BYTE数的话就是28,因为里面有4个中文~
    结果如下:
    '012345678901234567890123'---参照
    '哈哈哈哈                       '--System.out                
    LNNM在ORACLE里定义的是CHAR型,所以长度不足24时,会补空SPACE
    我试过其他字段,也是如此,比如CHAR(2)的字段,值为'美'
    HIBERNATE里取到的就是'美 '
    用show_sql为true..用显示的SELECT语句在SI OBJECT BROWSER执行,
    结果是正确的'哈哈哈哈                   '和'美',并没有多加SPACE是不是HIBERNATE哪里设置有问题?
      

  3.   

    '哈哈哈哈                      '--System.out         
    是比'012345678901234567890123'多四个空SPACE,
      

  4.   

    这不是HIBERNATE取数据的问题,DB中的大小是24byte,你往里存当然不能超过24byte。
    虽然你的字符串长度是24,可以一个汉字是2个字节(你目前的编码下),如果你这28byte能成功存进最大为24byte的字段,Hibernate才是出鬼了。建议你在页面(不知道你是不是Web开发)限制输入的最大字节数,不能超过24byte。还有,你的长度不足24补空格我想是因为你数据库的该字段用的是char(24),如果用varchar2(24)不会有这个情况。
      

  5.   

    先谢谢楼上滴回帖~
    不过,我知道原因是出在这值是从另一张表里取到后,后加空格后才出现的问题。
    现在的问题是为什么取数值的时候会在取到空格会多~(数据库里该表也是CHAR(24))
    用show_sql为true打出的SELECT在SI OBJECT BROWSER运行时,这字符串是4个中文+16个空格,(此应该为正解)
    但在程序里实际取到的却是4个中文+20个空格。(多了4个空格)感觉现在HIBERNATE一直在以字符数计算汉字?算的是LENGTH的长度
    取的时候,它一定把4个中文的单个长度看成1,才会在后面+20个空格的吧。。好奇怪啊~~我不希望改动数据类型~