环境:
数据库:Oracle 9i
数据库字段类型:varchar2(4000)
输入汉字:大于1000字
原因:
我的数据库字符集应该是UTF-8的,对于UTF-8或欧洲的某些字符集,oracle在存储时,对于一个字符需要2个或3个字节的存储空间,虽然表定义中为varchar2(4000),但是其实该字段的data_length为其2倍或3倍长。这种情况下oracle会把data_length长度超过4000的当做LONG型处理,你的表中有两个这样的字段,插入数据时相当于同时操作2个LONG字段,所以报错。
当时的解决办法:建议减小字段长度或拆分。实在需要的,可以转而采用CLOB字段类型。
Caused by: java.sql.BatchUpdateException: ORA-01461: 仅可以为插入 LONG 列的 LONG 值赋值
我在系统的一个页面上加载一个.xml文件时,出现了这个错误。
原因:
当插入数据的长度在1000、2000内,就会抛出这样的错误。
解决方法:
思路:将存储的字符串补上空格,让其超过2000的长度即可,但仅限与紧急解决问题。
1、首先在.java文件中引入import org.apache.commons.lang.StringUtils;
2、在此.java文件的相应的方法里添加如下判断:
// 处理ora-1461问题(clob长度在1000-2000之间会出错)
if (xml.length() >= 1000 && xml.length() <= 2000) {
xml = StringUtils.rightPad(xml, 2008);
}