本文給大家講述下遇到的Oracle字符集的問題。
前些日子公司剛剛把oracle10g升級到11g,在運行項目的時候是正常的,突然發現只有在使用oracle存儲過程新增的時候報空指針異常。
開始以為是客戶端的值沒有傳成功,經過調試,發現java數組轉oracle對象的時候出現亂碼。于是執行命令select * from nls_database_parameters,顯示字符集ZHS16GBK,原來的10G的字符集是AL32UTF8,終于找到了癥結所在,是字符集的問題。
下面是最初oracle對象定義:
CREATE TYPE type_name AS OBJECT( username varchar(20) )為了解決問題,網上了很多資料,花了很多步驟
1.原先以為是ORACLE驅動包的問題,升級了ojdbc.jar,發現沒有解決。
2.根據網上資料介紹說是要引入包nls_charset12.jar和orail18n.jar,于是我又下載了并引入,
發現不是報Java.lang.NoSuchMethodError: oracle.i18n.text.converter.CharacterConverterOG
就是項目運行不了。依然沒法解決。
3.皇天不負有心人終于我把varchar2改成nvarchar2完美解決。
最后的對象定義(正確解決):
CREATE TYPE type_name AS OBJECT( username nvarcahr2(20) )最后說一下varchar2與nvarchar2的區別
NVARCHAR2和VARCHAR2的區別,從使用角度來看區別在于:NVARCHAR2在計算長度時和字符集相關的,例如數據庫是中文字符集時以長度10為例,則
1、NVARCHAR2(10)是可以存進去10個漢字的,如果用來存英文也只能存10個字符。
2、而VARCHAR2(10)的話,則只能存進5個漢字,英文則可以存10個
新聞熱點
疑難解答