Oracle字符集問題

2021-04-13 01:22:50 字數 2543 閱讀 3947

oracle字符集問題一般可以分為三類: 資料庫字符集, sqlplus的字符集(客戶端字符集), 終端程式的字符集 (非oracle的)。

1、資料庫字符集。

資料庫字符集是所有字元問題的核心,只有資料庫本身的字符集正確了,客戶端的字符集才可能正確。這裡只的客戶端包括sqlplus以及我們自己讀資料庫的應用程式。

在定位問題時,我們需要先看看資料庫當前是什麼字符集。

1)查詢資料庫字符集

select * from nls_database_parameters

其中 nls_language表示了顯示方式, 就是sqlplus的程式的顯示字型,有simplified chinese,american america

其中  nls_characterset是字符集設定, 常用的一些字符集有utf8,us7ascii,we8iso8859p1,zhs16cgb231280,zhs16gbk, al32utf8

2)修改資料庫字符集

當發現資料庫字符集不正確時,如我們期望時gbk的,而資料庫當前是其他的,從而引起中文亂碼。這時我們需要修改資料庫字符集。步驟如下:

$sqlplus /nolog

sql>conn / as sysdba;

若此時資料庫伺服器已啟動,則先執行shutdown immediate命令關閉資料庫伺服器,然後執行以下命令:

sql>startup mount;

sql>alter system enable restricted session;

sql>alter system set job_queue_processes=0;

sql>alter system set aq_tm_processes=0;

sql>alter database open;

sql>alter database character set zhs16gbk;

sql>alter database national character set zhs16gbk;

sql>shutdown immediate;

sql>startup

2 客戶端字符集

如果伺服器端的字符集是正確的,而在客戶端下,如sqlplus仍然不能正確顯示中文,這一般是由於伺服器端的字符集設定與客戶端的字符集設定不同造成的。只要將兩者修改一致就可以解決問題。

1)查詢客戶端字符集

elect * from nls_instance_parameters

客戶端字符集環境select * from nls_instance_parameters,其**於v$parameter,

表示客戶端的字符集的設定,可能是引數檔案,環境變數或者是登錄檔

select userenv('language') from dual;

會話字符集環境 select * from nls_session_parameters,其**於v$nls_parameters,表示會話自己的設定,可能是會話的環境變數或者是alter session完成,如果會話沒有特殊的設定,將與nls_instance_parameters一致。 

客戶端的字符集要求與伺服器一致,才能正確顯示資料庫的非ascii字元。如果多個設定存在的時候,alter session>環境變數》登錄檔》引數檔案

字符集要求一致,但是語言設定卻可以不同,語言設定建議用英文。如字符集是zhs16gbk,則nls_lang可以是american_america.zhs16gbk。  或者.zhs16gbk。注意zhs16gbk前面那個點是必須的哦!!

2) 修改客戶端字符集

oracle 的sqlplus會去讀取os中環境變數下的nls_lang資訊

nsl_lang包括三個部分(語言_地區.字符集)就是v$nls_parameters表中的nls_language,nls_territory,nls_characterset

例如可以在cmd中鍵入

set nls_lang="simplified chinese_china.utf8"

set nls_lang="american_america.us7ascii"

set nls_lang="american_america.zhs16gbk"

set nls_lang="simplified chinese_china.zhs16gbk"

set nls_lang=".utf8"

set nls_lang=".zhs16gbk"

set nls_lang=".us7ascii"

unix下類似, 不過nls_lang要大寫nls_lang, 在.profile或這.bash_profile(根據你用的shell)裡更改nls_lang可以長久保持環境變數值.

3、終端字符集

如果資料庫字符集和sqlplus的字符集一致, 還是不能正確顯示了, 那很可能就是你的終端應用程式的字符集不支援了. 例如你用bash登陸sqlplus, 如果你的bash是個小字符集, 那麼就不能正常顯示了.linux修改bash的字符集, 可以先鍵入locale, 看有哪些環境變數, 再用export設定.

=============================================

ORACLE字符集問題

1.oracle資料庫字符集,即國家語言支援 nls 其作用是用本國語言和格式來儲存 處理和檢索資料。利用全球化支援,oracle為使用者提供自己熟悉的資料庫母語環境,諸如日期格式 數字格式和儲存序列等。oracle可以支援多種語言及字符集,oracle9i則支援57種語言 88個國家地域 235種...

oracle 字符集 問題

q 怎麼樣檢視資料庫字符集 a 資料庫伺服器字符集select from nls database parameters,其 於props 是表示資料庫的字符集。客戶端字符集環境select from nls instance parameters,其 於v parameter,表示客戶端的字符集的...

oracle字符集問題

1.資料庫 oracle11g 初始字符集 american america.utf8 通過客戶端實現字符集修改 simplified chinese china.zhs16gbk 1 windows環境 修改登錄檔 regedit 開啟登錄檔 hkey local machine software...