可以存储在VARCHAR2字段中的字符数是否受字符集的影响?

时间:2015-07-07 12:44:39

标签: java oracle jdbc character-encoding varchar

在我们客户的数据库中设置了以下字符集:

NLS_CHARACTERSET    AL32UTF8

在我的本地数据库中配置以下内容:

NLS_CHARACTERSET    AL32UTF8

当在我们客户的数据库中执行VARCHAR2(4000)列的插入时,会发生以下错误:

  

引起:java.sql.SQLException:ORA-01461:可以绑定LONG值   仅用于插入LONG列

在我的电脑上,一切正常。

使用带有java.sql.PreparedStatement的{​​{1}}绑定值。

可能是错误是由于字符集的差异造成的吗?字符集是否影响可以存储在preparedStatement.setString(3, value3);字段中的字符数量?

1 个答案:

答案 0 :(得分:0)

  

在Oracle 12.1之前,VARCHAR2列仅限于存储4000   数据库字符集中的数据字节,即使它已声明   VARCHAR2(4000 CHAR)。由于字符串中的每个字符都需要2   UTF-8字符集中的存储字节,你无法做到   在列中存储超过2000个字符。当然,这个数字   如果你的一些角色实际上只需要1个字节就会改变   存储或者其中一些存储需要超过2个字节的存储空间。

另见this answer