簡體   English   中英

Java字符串.length()X不適合DB2 varchar(X)

[英]Java string .length() X does not fit into DB2 varchar(X)

我觀察到一個問題,我試圖在DB2數據庫中保存一條記錄,該記錄中的字段具有Java代碼中的長度檢查功能。 我保持長度檢查完全等於數據庫varchar限制。 並嘗試保存但得到SQL異常DB2 SQL錯誤:SQLCODE = -302,SQLSTATE = 22001,SQLERRMC = null,DRIVER = 3.57.82;

然后,我將長度減小(截斷了),使其長度小於數據庫的大小。 截斷為varchar(1000)的子字符串(0,900)近似值。

請讓我說說同樣的原因。 它與字符編碼有關嗎? 需要如何處理?

什么是應用於字符串的默認字符編碼(從文本區域字段的請求參數輸入)以及相應的編號。 字節?

DB2計算字符串長度(以字節為單位),而不是字符。 因此,可以存儲的字符串的最大長度可能比給定varchar的大小短很多。

不幸的是,將字符串截斷為多個字節的唯一方法是將其編碼為字節,然后截斷並重建字符串。 從您所說的來看,聽起來像正在使用可變長度編碼,例如UTF-8。 困難的部分是最后不產生無效字符,而使用NIO charset API的方法是:

import java.nio.*;
...
CharBuffer in = CharBuffer.wrap(stringToTruncate);
ByteBuffer out = ByteBuffer.allocate(maxLength);
Charset db2charset = Charset.forName("UTF-8");
CharsetEncoder db2encoder = db2charset.newEncoder();
db2encoder.encode(in, out, true);
out.flip();
return db2charset.decode(out).toString();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM