在我们客户的数据库中设置了以下字符集:
NLS_CHARACTERSET AL32UTF8
在我的本地数据库中配置以下内容:
NLS_CHARACTERSET AL32UTF8
当在我们客户的数据库中执行VARCHAR2(4000)
列的插入时,会发生以下错误:
引起:java.sql.SQLException:ORA-01461:可以绑定LONG值 仅用于插入LONG列
在我的电脑上,一切正常。
使用带有java.sql.PreparedStatement
的{{1}}绑定值。
可能是错误是由于字符集的差异造成的吗?字符集是否影响可以存储在preparedStatement.setString(3, value3);
字段中的字符数量?
答案 0 :(得分:0)
在Oracle 12.1之前,VARCHAR2列仅限于存储4000 数据库字符集中的数据字节,即使它已声明 VARCHAR2(4000 CHAR)。由于字符串中的每个字符都需要2 UTF-8字符集中的存储字节,你无法做到 在列中存储超过2000个字符。当然,这个数字 如果你的一些角色实际上只需要1个字节就会改变 存储或者其中一些存储需要超过2个字节的存储空间。
另见this answer。