1. 程式人生 > 其它 >oracle中字符集 亂碼問題與解決

oracle中字符集 亂碼問題與解決

法一:https://www.cnblogs.com/xingxiudong/p/3986874.html
法二:https://www.cnblogs.com/tiandaochouqinbokeyuan/p/8795512.html

GBK:中國國家標準字符集,是GB2312擴充套件
ZHS16GBK:是oracle資料庫中支援GBK的字符集命名方式。
其格式為<語言><bit位><國家字符集>

法一:https://www.cnblogs.com/xingxiudong/p/3986874.html
SQL>
select * from nls_database_parameters where parameter='NLS_CHARACTERSET';
shutdown immediate
startup mount
alter system enable restricted session;
show parameter job_queue_processes;
alter system set job_queue_processes=0;
alter database open;
alter database character set ZHS16GBK;
alter database character set internal_use ZHS16GBK;
select * from nls_database_parameters where parameter='NLS_CHARACTERSET';
shutdown immediate
startup mount
alter system set job_queue_processes=1000;
alter database open;
shutdown immediate
startup

法二:https://www.cnblogs.com/tiandaochouqinbokeyuan/p/8795512.html
一、oracle server 端 字符集查詢
select userenv('language') from dual
其中NLS_CHARACTERSET 為server端字符集
NLS_LANGUAGE 為 server端字元顯示形式
二、查詢oracle client端的字符集
$ echo $NLS_LANG
三、server端字符集修改
更改字符集步驟方法(WE8ISO8859P1 --> ZHS16GBK)
ALTER SYSTEM ENABLE RESTRICTED SESSION;
ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
ALTER SYSTEM SET AQ_TM_PROCESSES=0;
alter database open;
ALTER DATABASE CHARACTER SET ZHS16GBK;
ERROR at line 1:
ORA-12712: new character set must be a superset of old character set
提示我們的字符集:新字符集必須為舊字符集的超集,這時我們可以跳過超集的檢查做更改:
ALTER DATABASE character set INTERNAL_USE ZHS16GBK;
select * from v$nls_parameters;
重啟檢查是否更改完成
select * from v$nls_parameters
四、修改環境變數
設定oracle使用者的的環境
linux下修改環境變數(臨時)
export NLS_LANG=SIMPLIFIED Chinese_CHINA.ZHS16GBK
變數名:NLS_LANG
變數值:SIMPLIFIED Chinese_CHINA.ZHS16GBK

Linux/Unix下的設定
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
export NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK

問題:
一個為HP UNIX環境下,字符集為AMERICAN_AMERICA.US7ASCII,另一個為NT 環境下,字符集為SIMPLIFIED CHINESE_CHINA.ZHS16GBK,現在我將UNIX資料庫裡的表導進NT環境的資料庫裡,但用SQLPLUS瀏覽,表裡所有的中文記錄都是亂碼,我曾將登錄檔NLS_LANG鍵值該過,該為AMERICAN_AMERICA.US7ASCII,但亂碼仍然出現
可能解決方法:
只通過修改登錄檔是不能解決的,你可以藉助EXECL檔案,先修改登錄檔中的NLS_LANG=AMERICAN_AMERICA.US7ASCII,然後用PL/SQL DEVELOP 或PB將資料到出為EXECL檔案,然後將登錄檔中的NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK,再將資料匯入到另一套資料庫中