今天遇到的一个问题:
直接修改数据表中的某些字段数据内容时报错:
?
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 问题总算解决,^_^? |
?
?法3: 转自?http://www.blogjava.net/allen-zhe/archive/2008/05/06/198627.html
1. Hibernate實體對象中的数据成员类型为String,映射的数据库字段类型为org.springframework.orm.hibernate.support.ClobStringType。實例如下:
@SuppressWarnings("serial")
@Entity @Table(name?=?"GUIDE") //@Cache(usage?=?CacheConcurrencyStrategy.READ_WRITE) public?class?Guide?{ ???? ????@Type(type?=?"org.springframework.orm.hibernate3.support.ClobStringType") ????private?String?content;?//内容 ?????????//get?&?set? } 2. 如果使用Spring的这个Clob类型就需要在applicationContext.xml中的sessionFactory bean里注入oracleL
免责声明: 本文仅代表作者个人观点,与爱易网无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
|