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 問題總算解決,^_^ |