gpt4 book ai didi

Java string .length() X 不适合 DB2 varchar(X)

转载 作者:行者123 更新时间:2023-11-30 08:29:36 29 4
gpt4 key购买 nike

我观察到一个问题,我试图在 DB2 数据库中保存一条记录,其中的字段在 Java 代码中进行了长度检查。我一直保持长度检查完全等于数据库 varchar 限制。并尝试保存但出现 SQL 异常 DB2 SQL 错误:SQLCODE=-302、SQLSTATE=22001、SQLERRMC=null、DRIVER=3.57.82;

然后我减长(truncated)长度小于数据库大小。截断为 varchar(1000) 的子字符串 (0, 900) apprx。

请告诉我可能是什么原因。与字符编码有关吗?需要怎么处理?

String(文本区域字段的请求参数输入)的默认字符编码是什么以及对应的编号。字节数?

最佳答案

DB2 以字节而不是字符为单位计算字符串长度。因此,您可以存储的字符串的最大长度可能比为 varchar 指定的大小短很多。

不幸的是,将字符串截断为多个字节的唯一方法是将其编码为字节、截断并重建字符串。从你所说的听起来像是正在使用可变长度编码,例如 UTF-8。困难的部分是不在最后产生无效字符,而做到这一点的方法是使用 NIO 字符集 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();

关于Java string .length() X 不适合 DB2 varchar(X),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19280432/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com