oracle國家字符集與資料庫字符集

studywell發表於2016-06-17
轉:http://blog.csdn.net/onlymilan/article/details/5667277

oracle國家字符集與資料庫字符集

伺服器端:(oracle伺服器端字符集)
資料庫字符集在建立資料庫時指定,在建立後通常不能更改。在建立資料庫時,可以指定字符集(CHARACTER SET)和國家字符集(NATIONAL CHARACTER SET)。
1. 字符集:
    (1)用來儲存CHAR, VARCHAR2, CLOB, LONG等型別資料
    (2)用來標示諸如表名、列名以及PL/SQL變數等
    (3)用來儲存SQL和PL/SQL程式單元等
2. 國家字符集:
    (1)用以儲存NCHAR, NVARCHAR2, NCLOB等型別資料
    (2)國家字符集實質上是為oracle選擇的附加字符集,主要作用是為了增強oracle的字元處理能力,因為NCHAR資料型別可以提供對亞洲使用定 長多位元組編碼的支援,而資料庫字符集則不能。國家字符集在oracle9i中進行了重新定義,只能在unicode編碼中的AF16UTF16和UTF8 中選擇,預設值是AF16UTF16
3. 查詢字符集引數:
    可以查詢以下資料字典或檢視檢視字符集設定情況
    nls_database_parameters、props$、v$nls_parameters
    查詢結果中NLS_CHARACTERSET表示字符集,NLS_NCHAR_CHARACTERSET表示國家字符集
4. 修改資料庫字符集:
    按照上文所說,資料庫字符集在建立後原則上不能更改。如果需要修改字符集,通常需要匯出資料庫資料,重建資料庫,再匯入資料庫資料的方式來轉換,或透過 ALTER DATABASE CHARACTER SET語句修改字符集,但建立資料庫後修改字符集是有限制的,只有新的字符集是當前字符集的超集時才能修改資料庫字符集,例如UTF8是US7ASCII 的超集,修改資料庫字符集可使用ALTER

客戶端:(NLS_LANG引數)
客戶端字符集定義了客戶端字元資料的編碼方式,任何發自或發往客戶端的字元資料均使用客戶端定義的字符集編碼,客戶端可以看作是能與資料庫直接連線的各種應用,例如sqlplus,exp/imp等。客戶端字符集是透過設定NLS_LANG引數來設定的。

國家字符集的不同:(AL16UTF16與UTF-8)
1. AL16UTF16 和 UTF8 這兩種選擇都適用於國家字符集
2. AL16UFT16 是寬度固定的雙位元組 Unicode 字符集;UTF8 是寬度可變的、一至三個位元組的 Unicode 字符集
3. 歐洲字元在 UTF8 中按一至兩個位元組儲存,而在 AL16UTF16 中按兩個位元組儲存,相比之下,UTF8可以節省空間;亞洲字元在 UTF8 中按三個位元組儲存,這樣,所需的空間比在 AL16UTF16 中要多
4. AL16UTF16 是寬度固定的編碼,因此在執行速度上要比寬度可變的 UTF8 快

如果使用EXP/IMP進行資料庫的匯出/匯入,不僅要注意兩伺服器端之間的字符集的相容性,而且要考慮到匯出/匯入過程中,伺服器端與客戶端之間的字符集的相容性,特別是匯出的時候。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29519108/viewspace-2120374/,如需轉載,請註明出處,否則將追究法律責任。

相關文章