2015-01-10 38 views
0

我正在使用N函数来更新SQL查询中的NClob。但是,使用N函数的更新不允许我更新超过1900个字符。删除N功能后。我能够将超过1900个字符更新到我的NClob专栏。使用N更新NClob函数问题

任何人都可以帮助我为什么我不能使用N函数更新NClob列吗?它有什么限制吗?

代码是

StringBuilder的updateQuery =新的StringBuilder( “更新TABLE_NAME组列名=”); updateQuery.append(“= N'”)。append(NClobContent).append(“'”)。append(“,”); ps.execute(updateQuery.toString());

+0

请显示验证码和错误。 – OldProgrammer

+0

它是一个简单的更新语句如下 - 更新table_name设置column_name = N'String的长度超过4000个字符'其中rowid = 12345 我得到的错误是“字符串文字太长” – user1661892

+0

请编辑您的问题,并在那里发布代码,而不是评论,并显示调用此代码。 – OldProgrammer

回答

0

如上所述in the documentation

  • 文本文字可以具有4000个字节的最大长度。

N个装置被使用国家字符集,这将是UTF8或AL16UTF16(后者默认情况下),所以即使你的长串具有更少然后4000个字符,它能字面仍有4000 字节

如果没有N字符串在数据库字符集中解释,然后文字将被转换为国家字符集,因为它存储在NCLOB中。因此,您可能会有更长的字符串 - 如果您的数据库字符集是单字节,那么您最多可以使用4000个字符,但您的NClobCOntent变量中的任何多字节字符都会被损坏。

不是使用N语法,而是将您的变量传递给数据库as a stream;你可能会发现this answer是一个有用的起点。或者您可能可以使用this approach,具体取决于字符串的长度。

+0

当我使用cstmt.setCharacterStream()时,后端函数(它正在接收一个NCLOB)不能保存unicode字符。完成这些工作的目的是在NCLOB中存储unicode字符(如日文或俄文字符)并使用流,我无法将其传递到后端。 – user1661892