首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> DB2 資料庫 >> DB2 教學

解決 java.sql.BatchUpdateException: ORA-12899 字串超長問題

     編輯:DB2 教學

解決 java.sql.BatchUpdateException: ORA-12899 字串超長問題

錯誤現場

java.sql.BatchUpdateException: ORA-12899: value too large for column "SCOTT"."EMP1"."JOB" (actual: 12, maximum: 9)

XML 解析資料入庫時拋出,欄位 JOB 實際 12 位元組,定義僅 9 位元組。

根因:Oracle 字元集與位元組計算

SELECT USERENV('LANGUAGE') FROM DUAL;
  • SIMPLIFIED CHINESE_CHINA.ZHS16GBK → 中文佔 2 位元組
  • SIMPLIFIED CHINESE_CHINA.AL32UTF8 → 中文佔 3 位元組

本地資料庫為 AL32UTF8,「項目經理」4 字 × 3 = 12 位元組,超過 VARCHAR2(9) 限制。

解決方案

CREATE TABLE emp1(
  empno NUMBER(4),
  ename VARCHAR2(10),
  job VARCHAR2(12),  -- 擴大至 12 位元組以上
  hiredate DATE,
  sal NUMBER(7,2),
  comm NUMBER(7,2)
);

或改用字元語意定義:VARCHAR2(12 CHAR)(12c+ 支援),明確指定字元數而非位元組數。

最佳實踐

  • 建表前確認資料庫字元集 (NLS_CHARACTERSET)
  • 中文環境預留 3 倍位元組空間或使用 CHAR 語意
  • 批次插入前驗證資料長度
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved