Jdbc db2sqlcode:-302sqlstate:22001在插入行时替换新行字符

Jdbc db2sqlcode:-302sqlstate:22001在插入行时替换新行字符,jdbc,db2,Jdbc,Db2,我遇到了一个问题,即尝试插入行时替换新行字符时出错 环境: 操作系统:aix7 DBMS:DB2 JDBC驱动程序版本:db2jcc4-10.5.4 编码:UTF-8(数据库管理系统和应用程序) 问题: 我有一个表“TBA”,它有一个列“CONTENT”,VARCHAR(600) 当我试图用一个简单的insert查询向表中插入一行时,它会抛出一个SQLException,SQLCODE:-302 SQLSTATE:22001,即使内容值的长度未达到限制,仍为600字节。我用不同的值尝试了几次,我

我遇到了一个问题,即尝试插入行时替换新行字符时出错

环境

操作系统:aix7
DBMS:DB2
JDBC驱动程序版本:db2jcc4-10.5.4
编码:UTF-8(数据库管理系统和应用程序)

问题

我有一个表“TBA”,它有一个列“CONTENT”,VARCHAR(600)

当我试图用一个简单的insert查询向表中插入一行时,它会抛出一个SQLException,SQLCODE:-302 SQLSTATE:22001,即使内容值的长度未达到限制,仍为600字节。我用不同的值尝试了几次,我知道允许插入的限制字节数是254

插入查询如下所示:

INSERT INTO TBA (CONTENT) value (REPLACE(REPLACE(?, '\\n', chr(10)), '\\t', chr(09)))
<form action="..." method="POST" name="..">
    <input type="text" name="content"/>
</form>
与要插入的值一起使用的replace函数是必需的,因为允许客户端插入换行符并从试图插入的内容值中点击字符,并且内容将使用javascript显示在浏览器屏幕上的警报消息中

客户端层的操作只是提交一个带有textbox元素的POST请求,如下所示:

INSERT INTO TBA (CONTENT) value (REPLACE(REPLACE(?, '\\n', chr(10)), '\\t', chr(09)))
<form action="..." method="POST" name="..">
    <input type="text" name="content"/>
</form>
最后,我尝试删除查询中的replace函数,并以客户端(浏览器)-服务器的方式执行它,然后我就可以正常工作了

我错过了什么??replace函数可以拉伸值的长度?但为什么它只在以客户端(浏览器)-服务器方式执行时发生


请让我知道。

也许你可以在Java代码中进行替换,然后记录字符串和/或检查字符和字节的长度(
str.length()
str.getBytes(“UTF-8”).length
)@ZsigmondLőrinczy是的,我尝试了,结果与值看起来一样。没有奇怪,没有变异。我认为它不是在java层,而是在DB层。纯粹为了表示层的目的改变dbms内容通常是一个设计缺陷。如果您的DB2当前函数路径被更改(即,在SYSFUN之前没有SYSIBM),那么首先修复该问题。您可能需要强制转换参数标记以匹配输入值的编码。请尝试显式指定参数标记类型:
…值(替换(替换(强制转换为varchar(600)),'\\n',chr(10)),'\\t',chr(09))
它以某种方式将类型从
varchar
转换为
char