Oracle 8i在更新中包含varchar2和date類型的相關記錄時varchar2會出現亂碼問題,雖然Oracle 8i以前就被人使用,現在用的人並不占多數,但是畢竟還是有一部分的人在用的,比如遇到亂碼等相關問題的介紹。
問題描述:
環境:Windows XP,Oracle 8i 8.1.6.0.0
問題:使用JDBC連接數據庫,在同時更新一個包含varchar2和date類型的記錄時,某個varchar2會出現亂碼,無論英文還是中文,並且還有可能同一個字段前半部分亂碼後半部分不亂碼。同樣的sql語句,使用sqlplus執行就沒有問題。
問題解決:
首先,用DBA的權限執行下面的語句:
select tab1.aa||'_'||tab2.bb||'.'||tab3.cc from (select VALUE$ aa from sys.props$ where name='NLS_LANGUAGE')tab1,(select VALUE$ bb from sys.props$ where name='NLS_ISO_CURRENCY')tab2,(select VALUE$ cc from sys.props$ where name='NLS_CHARACTERSET')tab3
在Oracle 8i運行中要更新復制上面語句的執行結果,在我的機器上執行的結果是:AMERICAN_AMERICA.ZHS16GBK打開注冊表,找到HKEY_LOCAL_MacHINE/SOFTWARE/Oracle/HOME0,找到NLS_LANG,雙擊,將數值數據改為剛復制的那個
修改完注冊表,重啟機器。在這裡可能有一些問題,首先如果你的Oracle不是一次安裝成功的,那麼可能有HOME0,HOME1等,在我的經歷中,首先將HOME1中的NLS_LANG改了,但是問題依舊,然後將HOME0中改了,問題才解決,所以改的時候把所有的HOMEX中NLS_LANG的都改了吧,如果沒有就新建一個。
其次,單改注冊表可能還會出現問題,這時候就要改jdbc驅動了,不要用那些10g,9i,8i通吃的驅動,去Oracle安裝目錄中的jdbc目錄找,用這裡的驅動問題解決。
以上就是對Oracle 8i更新包含varchar2和date類型的記錄時varchar2亂碼的相關內容的介紹,望你會有所收獲。