ORA-01461: 僅可以為插入 LONG 列的 LONG 值賦值”解決辦法

zhyp29發表於2016-12-23

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

問題總算解決,^_^

相關文章