0

我正在使用 N 函数来更新 SQL 查询中的 NClob。但是,使用 N 函数的更新不允许我更新超过 1900 个字符。去掉 N 函数后。我能够将 1900 多个字符更新到我的 NClob 列。

谁能帮我解释为什么我不能使用 N 函数更新 NClob 列?有什么限制吗?

代码是

StringBuilder updateQuery = new StringBuilder("更新表名设置列名="); updateQuery.append(" = N'").append(NClobContent).append("'").append(" , "); ps.execute(updateQuery.toString());

4

1 回答 1

0

文档中所述

  • 文本文字的最大长度为 4000 字节。

N 表示文字使用的是国家字符集,它将是 UTF8 或 AL16UTF16(默认情况下为后者),因此即使您的长字符串少于 4000 个字符,它仍然可以有超过 4000个字节

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

与其使用 N 语法,不如将变量作为流传递给数据库;您可能会发现此答案是一个有用的起点。或者您可以使用这种方法,具体取决于字符串长度。

于 2015-01-12T19:10:11.910 回答