ORA-01461: 仅可以为插入 LONG 列的 LONG 值赋值”解决办法 

今天遇到的一个问题:

直接修改数据表中的某些字段数据内容时报错:

 

ORA-01461: 仅可以为插入 LONG 列的 LONG 值赋值”解决办法

 

上网查询发现解决途径有:

 法1,数据库字符集应该是UTF-8的,对于UTF-8或欧洲的某些字符集,oracle在存储时,对于一个字符需要2个或3个字节的存储空间,虽然表定义 中为varchar2(4000),但是其实该字段的data_length为其2倍或3倍长。这种情况下oracle会把data_length长度超 过4000的当做LONG型处理,你的表中有两个这样的字段,插入数据时相当于同时操作2个LONG字段,所以报错。

 當時的解决办法:建议减小字段长度或拆分。实在需要的,可以转而采用CLOB字段类型。 

 

但我的修改的数据不可能超过这个长度,就像http://www.blogjava.net/allen-zhe/archive/2008/05/06/198627.html 评论1楼所说,我的长度太小,根本不会是这个问题

此法pass!

 

法2,采用Oracle 10g最新的ojdbc14.jar驱动替換原有的驅動。

我直接在数据库中操作的,应该说是用不到这些驱动的。此法不可用于我的情况。

 


ORA-01461: can bind a LONG value only for insert into a LONG column

      开发项目,今天又难到问题。junit测试写数据到oracle时,出现:ORA-01461: can bind a LONG value only for insert into a LONG column错 误,郁闷,试了几次发现,中文才会有这个问题,而且jsp页面里输入的中文又不会报这个错(前端是struts)。像mysql的话,很有可能是数据库字 符编码问题,就怀疑是否为字符编码问题(这种思维不知道会不会很傻),因为项目所有编码都是utf-8, 看了下oracle是zhs16GBK。然后就建一个gbk的项目来测试,结果还是出现此问题。后来就换用旧系统的classes12.jar驱动测试 下,^_^, 不会了,太好了。看了下classes12.jar的版本是9.0.2.0.0的而且又是classes12.jar不爽,后来看到一个帖子,说:用9的和10.2的没有此问题,我回去看下之前出问题的版本是10.1.0.2.0,郁闷,用的数据库是10.2.0.1.0。马上换成10.2.0.1.0的版本。当初不注意,今天花了我几个小时。我一直以为jdbc是数据库对应的。


对应的jdbc在oracle安装目录可以找到oracle\product\10.2.0\db_1\jdbc\lib\ojdbc14.jar


问题总算解决,^_^