超詳細的Oracle 字符集的查看和修改

一、什麼是Oracle字符集

Oracle字符集是一個字節數據的解釋的符號集合,有大小之分,有相互的包容關係。ORACLE 支持國家語言的體系結構允許你使用本地化語言來存儲,處理,檢索數據。它使數據庫工具,錯誤消息,排序次序,日期,時間,貨幣,數字,和日曆自動適應本地化語言和平臺。

影響Oracle數據庫字符集最重要的參數是NLS_LANG參數。

它的格式如下: NLS_LANG = language_territory.charset

如:AMERICAN _ AMERICA. ZHS16GBK

從NLS_LANG的組成我們可以看出,真正影響數據庫字符集的其實是第三部分。

所以兩個數據庫之間的字符集只要第三部分一樣就可以相互導入導出數據,前面影響的只是提示信息是中文還是英文。


二.字符集的相關知識:

2.1 字符集

實質就是按照一定的字符編碼方案,對一組特定的符號,分別賦予不同數值編碼的集合。Oracle數據庫最早支持的編碼方案是US7ASCII。

Oracle的字符集命名遵循以下命名規則:

即:

比如: ZHS16GBK表示採用GBK編碼格式、16位(兩個字節)簡體中文字符集

2.2 字符集超集

當一種字符集(字符集A)的編碼數值包含所有另一種字符集(字符集B)的編碼數值,並且兩種字符集相同編碼數值代表相同的字符時,則字符集A是字符集B的超級,或稱字符集B是字符集A的子集。

2.3 數據庫字符集(oracle服務器端字符集)

數據庫字符集在創建數據庫時指定,在創建後通常不能更改。在創建數據庫時,可以指定字符集(CHARACTER SET)和國家字符集(NATIONAL CHARACTER SET)。

2.3.1字符集

(1)用來存儲CHAR, VARCHAR2, CLOB, LONG等類型數據

(2)用來標示諸如表名、列名以及PL/SQL變量等

(3)用來存儲SQL和PL/SQL程序單元等

2.3.2查詢字符集參數

可以查詢以下數據字典或視圖查看字符集設置情況

nls_database_parameters、props$、v$nls_parameters

查詢結果中NLS_CHARACTERSET表示字符集,NLS_NCHAR_CHARACTERSET表示國家字符集

2.3.3修改數據庫字符集

數據庫字符集在創建後原則上不能更改。不過有2種方法可行。

1. 如果需要修改字符集,通常需要導出數據庫數據,重建數據庫,再導入數據庫數據的方式來轉換。

2. 通過ALTER DATABASE CHARACTER SET語句修改字符集,但創建數據庫後修改字符集是有限制的,只有新的字符集是當前字符集的超集時才能修改數據庫字符集,例如UTF8是US7ASCII的超集,修改數據庫字符集可使用ALTER DATABASE CHARACTER SET UTF8。

2.4 客戶端字符集(NLS_LANG參數)

2.4.1客戶端字符集含義

客戶端字符集定義了客戶端字符數據的編碼方式,任何發自或發往客戶端的字符數據均使用客戶端定義的字符集編碼,客戶端可以看作是能與數據庫直接連接的各種應用,例如sqlplus,exp/imp等。客戶端字符集是通過設置NLS_LANG參數來設定的。

2.4.2 NLS_LANG參數格式

NLS_LANG=_.

Language: 顯示oracle消息,校驗,日期命名

Territory:指定默認日期、數字、貨幣等格式

Client character set:指定客戶端將使用的字符集

例如:NLS_LANG=AMERICAN_AMERICA.US7ASCII

AMERICAN是語言,AMERICA是地區,US7ASCII是客戶端字符集

2.4.3客戶端字符集設置方法

1)UNIX環境

$NLS_LANG=“simplified chinese”_china.zhs16gbk

$export NLS_LANG

編輯oracle用戶的profile文件

2)Windows環境

Regedit.exe ---》 HKEY_LOCAL_MACHINE ---》SOFTWARE ---》 ORACLE-HOME


三. 查看數據庫字符集

涉及三方面的字符集,

1. oracel server端的字符集;

2. oracle client端的字符集;

3. dmp文件的字符集。

在做數據導入的時候,需要這三個字符集都一致才能正確導入。

4.1 查詢oracle server端的字符集

有很多種方法可以查出oracle server端的字符集,比較直觀的查詢方法是以下這種:

超詳細的Oracle 字符集的查看和修改

4.2 查詢oracle client端的字符集

在windows平臺下,就是註冊表裡面相應OracleHome的NLS_LANG。還可以在dos窗口裡面自己設置,

比如: set nls_lang=AMERICAN_AMERICA.ZHS16GBK

這樣就隻影響這個窗口裡面的環境變量。

在unix平臺下,就是環境變量NLS_LANG。

$echo $NLS_LANG

AMERICAN_AMERICA.ZHS16GBK

如果檢查的結果發現server端與client端字符集不一致,請統一修改為同server端相同的字符集。


篇幅有限,這裡就主要介紹 常用的這些Oracle 字符集的查看和修改方法,大家有空可以嘗試下。

後面會更多分享關於DBA和devops內容,感興趣的朋友可以關注下!

超詳細的Oracle 字符集的查看和修改


分享到:


相關文章: