最近安裝個Oracle 10g數據庫,dbca建庫的時候沒選字符集或者選錯的情況,導入數據后,中文全部是亂碼(搞笑的是,中文亂碼 居然全部是個“靠”字),查看網絡幾篇文章,也做了相應修改(以前按方法修改可以解決的,今天特例!),解決辦法如下:
SQL> connect / as sysdba; ---dba用戶連接數據庫
-
SQL> select name,value$ from props$ where name like '%NLS%';---語句查詢當前數據庫服務器字符集
NAME
------------------------------------------------------------
VALUE$
--------------------------------------------------------------------------------
NLS_LANGUAGE
AMERICAN
NLS_TERRITORY
AMERICA
NLS_CURRENCY
$
NAME
------------------------------------------------------------
VALUE$
--------------------------------------------------------------------------------
NLS_ISO_CURRENCY
AMERICA
NLS_NUMERIC_CHARACTERS
.,
NLS_CHARACTERSET ----找到查出來的結果中的該項參數
WE8ISO8859P1
下面是修改過程:
SQL> shutdown immediate; ---停止數據庫
Database closed.
Database dismounted.
Oracle instance shut down.
SQL> startup mount ---啟動數據庫到mount狀態
Oracle instance started.
Total System Global Area 235999352 bytes
Fixed Size 450680 bytes
Variable Size 201326592 bytes
Database Buffers 33554432 bytes
Redo Buffers 667648 bytes
Database mounted.
---下面是修改過程,按步驟修改
SQL> alter session set sql_trace=true;
Session altered.
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.
SQL> set linesize 120;
SQL> alter database character set zhs16gbk;
alter database character set zhs16gbk
*
ERROR at line 1:
ORA-12712: new character set must be a superset of old character set
SQL> ALTER DATABASE character set INTERNAL_USE zhs16gbk;
# 使用INTERNAL_USE可以跳過超集的檢查,
(ALTER DATABASE character set INTERNAL_USE )
Database altered.
SQL> shutdown immediate; ---再停止數據庫
Database closed.
Database dismounted.
Oracle instance shut down.
---啟動數據庫
SQL> STARTUP
Oracle instance started.
Total System Global Area 235999352 bytes
Fixed Size 450680 bytes
Variable Size 201326592 bytes
Database Buffers 33554432 bytes
Redo Buffers 667648 bytes
Database mounted.
Database opened.
SQL>
----再次查看當前字符集
SQL> select name,value$ from props$ where name like '%NLS%';
NAME
------------------------------
VALUE$
--------------------------------------------------------------------------------
NLS_LANGUAGE
SIMPLIFIED CHINESE
NLS_TERRITORY
CHINA
NLS_CURRENCY
?
NAME
------------------------------
VALUE$
--------------------------------------------------------------------------------
NLS_ISO_CURRENCY
CHINA
NLS_NUMERIC_CHARACTERS
.,
NLS_CHARACTERSET
ZHS16GBK ---【已經修改成為中文編碼了】
今天的情況特殊,修改完了,中文亂碼還是“靠”字,- -
后來試著修改系統字符集
在Oracle下 .bash_profile 文件里面加入
export NLS_LANG="Simplified Chinese_CHINA.ZHS16GBK"
再次登錄查看,還是不行
最后把NLS_LANG中后面的字符集ZHS16GBK修改成AL32UTF8,查看結果,搞掂完成,回家!
總結:要系統字符集和數據庫字符集相對應才會解決中文亂碼問題,dbca建庫時,也要注意字符集選擇問題。
本文出自:億恩科技【www.vbseamall.com】
服務器租用/服務器托管中國五強!虛擬主機域名注冊頂級提供商!15年品質保障!--億恩科技[ENKJ.COM]
|