Oracle Varchar2(字节)vs java字节

时间:2015-03-06 16:45:12

标签: java oracle

我有一个列定义了varchar2(255字节)的表, 当我通过Spring JDBC类插入记录时,我有一个错误

; nested exception is java.sql.BatchUpdateException: ORA-12899: de­er "DBB"."USERS"."NICK" s³tunu iin ok b³y³k (as²l: 441, maksimum: 255)

我一直在通过以下方法裁剪String,但它不起作用

   public static String filterStringForTxnLog(String string) {      
      try {
         String noPipe = string.replace('|', '.');
         byte noPipeBytes[]= noPipe.getBytes("UTF-8");
         if (noPipeBytes.length > 255) {
            byte [] cropBytes = new byte[255];
            for(int i=0;i<255;i++){
               cropBytes[i]=noPipeBytes[i];
            }
            return new String(cropBytes);
         }
         return noPipe;
      } catch (Exception e) {
         logger.error("Nick filter error string:" + string, e);
         return "";
      }
   }

当我传递以下字符串时,新String的字符串大小不适合DB列。

||123123123123123123123123kşlkşlkşlk12şl3l1k3şl21kşl3üğüğoşşşşşşşşşşşşşşşşşşşşşşşşşşşşşşşşşşşşşşşşşşşşşşşşşşşş123123123123123123123123123123123123123123112321323123123123

3 个答案:

答案 0 :(得分:1)

这是编码问题。你有一些特殊的UTF-8字符,它们以多个字节编码,这使得它超过255个字节。将其黑客攻击到255个字节是危险的,可能会导致损坏。您需要考虑编码。

答案 1 :(得分:1)

您需要将列的定义更改为VARCHAR2(255 CHAR )。

答案 2 :(得分:0)

我已将String创建更改为以下内容,然后才能正常工作。

return new String(cropBytes,"UTF-8");