From:http://space.itpub.net/8113358/viewspace-709416
問題描述:同事在Linux下安裝的oracle,默認的字符集沒有修改,使用的是WE8ISO8859P1,不能夠支持中文,
問題表現爲,客戶端錄入的中文數據可以顯示,提交之後再查詢出來後中文會顯示爲???。問題出在oracle服務端的字符集不支持中文導致。
可以通過:
select userenv('language') from dual; 命令可以查看服務端的使用的字符集。
或者select * from V$NLS_PARAMETERS;命令也可以
以及 select * from SYS.PROPS$;
確定了問題後就Google了一下,網上倒是有很多這方面的資料。可能是自己的環境和他們的不一致的原因,按照網上的那些步驟我的問題沒有解決。
問題根源找到了就好解決了,參考着網上的資料自己的解決步驟如下:
總的來說有兩個思路:
1、重新安裝
2、修改字符集
注:第一個方法沒有用,覺得重裝不是我喜歡的道道,解決問題是根本。所以我選擇的是第二種方式。
網上很多人說,oracle服務端安裝好了之後字符集是不可以更改的,實踐證明是可以修改的,至少oracle8以上的版本都是可以修改的。
我的解決步驟:
1、ssh登錄,切換到oracle用戶
切換用戶命令:su -oracle
之後用sqlplus登錄oracle,命令:
:sqlplus /nolog
:connect /as sysdba
這樣就登錄了。
2、更改字符集
首先 sqlplus登錄後,關閉oracle數據庫
1.shutdown immediate ;
2.startup mount ;
3.alter system enable restricted session ;
4.alter system set JOB_QUEUE_PROCESSES=0;
5.alter system set AQ_TM_PROCESSES=0;
6.alter database open ;
7. alter database character set INTERNAL_USE ZHS16GBK;
8.shutdown immediate ;
9.startup ;
注:一開始我按照上面的步驟沒有解決,因爲在第7步的時候有的資料提示使用alter database character set ZHS16GBK;我試過,這個命令不行,我使用的是alter database character set INTERNAL_USE ZHS16GBK; 提示修改成功。同樣,如果在startup mount 下命令提示error的話,可以嘗試在startup restrict下運行第七步的命令。
以下是我的調試命令記錄,大家可以參考一下,那些提示錯誤的命令都是執行失敗的,可以不必管。
SQL> conn /as sysdba
Connected.
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount
ORACLE instance started.
Total System Global Area 285212672 bytes
Fixed Size 1218992 bytes
Variable Size 104859216 bytes
Database Buffers 176160768 bytes
Redo Buffers 2973696 bytes
Database mounted.
SQL> alter system enable restricted session;
System altered.
SQL> alter system set job_queue_processes=0;
System altered.
SQL> alter system set aq_tm_processes=0;
System altered.
SQL> alter database open;
Database altered