使用oracle時,如果插入字符串超出字符串長度會報這一錯誤。因為VARCHAR2的oracle長度限制是4000,所以如果長度為4000還放不下,可以考慮將數據類型改為clob(character large object)類型。clob類型少於4000個字節,會與記錄放在一起存儲,超過4000個字符,就會分開存儲,個人估計會在記錄里計入分開存儲的入口地址。clob最大支持4G字節。
但是oracle修改把列類型從varchar修改為clob類型,是會報錯的,錯誤是ORA-22858: 數據類型的變更無效。
這時候只能將表數據備份后,刪表重建。
-------------------分割線----------------
下面講一下VARCHAR2長度的計算。
限定字符集SIMPLIFIED CHINESE_CHINA.ZHS16GBK(通過select userenv('language') from dual;)查看
此字符集下,英文字符占用字節數為1,中文字符占用字節數2。
而VARCHAR2的長度指的是字節數,VARCHAR2(4000)可以保存4000個英文字符或者2000個中文字符。
NVARCHAR2的長度指的是字符數,NVARCHAR只能保存AL16UTF16 or UTF8這兩種字符集,最大支持2000個字符。