java - Oracle Varchar2(byte) 与 java 字节

标签 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)

我一直通过以下方法裁剪字符串,但它不起作用

   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 "";
      }
   }

当我传递以下新字符串的字符串大小不适合数据库列时。

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

最佳答案

这是一个编码问题。您有一些特殊的 UTF-8 字符,它们被编码为多个字节,这使得它超过 255 个字节。将其缩减至 255 字节是危险的,可能会导致损坏。您需要考虑编码。

关于java - Oracle Varchar2(byte) 与 java 字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28903506/

相关文章:

sql - 使用 while 条件的嵌套查询 - sql

java - 使用自己的对象从 JTree 拖放到 JList

java - JLabel 鼠标事件

forms - 如何在 Oracle Forms Builder 中显示对话框 Canvas ?

c++ - 使用来自 SOCI 的匿名 PL SQL block 调用 PLsql 脚本

java - ResultSet 不为 null,但 resultset.next() 返回 false

java - 基于for循环的可变ImageView名称

java - 如何将CSS和JS添加到Spring mvc项目中

java - 如何正确表示 Java 版本?

oracle - 从 SYS_CONTEXT/USERENV 读取所有参数