数据库是oracle 10g 字段大小是是 varchar(30),数据库编码为utf-8
我在一个函数中 return 了一个 str.substring(0,30);
以为就会满足 oracle 中的varchar(30)
结果出错了,出错的字符串为:
CZHP稨AINWBAADHMRN6FCDICOOEFSD1我在这里想问一下,这是怎么会事?java JDBC里 statement.execute(sqlstr),
sqlstr中的字符串(如: insert into table ('stra','strb','strc'))输往数据库时是什么编码?如果要在这里加上一个varchar(30)的限制,大家都怎么加?

解决方案 »

  1.   

    tr.substring(0,30);应该是31个字符吧。
      

  2.   

    "sqlstr中的字符串(如: insert into table ('stra','strb','strc'))输往数据库时是什么编码",这个会自动转化成数据库编码格式。
      

  3.   

    在JAVA中任一字符都是Uicode编码的,占两个字节
      

  4.   

    写入数据库时候是什么时候?是在JAVA发送网络包时?还是数据库接收包时?
    那这么说,如果数据库是UTF-8的,我应该测试String 的UTF8长度?
      

  5.   

    nvarchar(30)varchar(30) 默认是 varchar(30 byte)