ORA-01461: 仅能够为插入 LONG 列的 LONG 值赋值”解决办法 html
今天遇到的一个问题:前端
直接修改数据表中的某些字段数据内容时报错:java
ORA-01461: 仅能够为插入 LONG 列的 LONG 值赋值”解决办法mysql
上网查询发现解决途径有:sql
法1,数据库字符集应该是UTF-8的,对于UTF-8或欧洲的某些字符集,oracle在存储时,对于一个字符须要2个或3个字节的存储空间,虽然表定义 中为varchar2(4000),可是其实该字段的data_length为其2倍或3倍长。这种状况下oracle会把data_length长度超 过4000的当作LONG型处理,你的表中有两个这样的字段,插入数据时至关于同时操做2个LONG字段,因此报错。数据库
當時的解决办法:建议减少字段长度或拆分。实在须要的,能够转而采用CLOB字段类型。 oracle
但个人修改的数据不可能超过这个长度,就像http://www.blogjava.net/allen-zhe/archive/2008/05/06/198627.html 评论1楼所说,个人长度过小,根本不会是这个问题jsp
此法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问题总算解决,^_^ |