
一般情況下數據庫字符集UTF-8;國家字符集:UTF-16。
服務器端:(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
數據庫字符集在創建數據庫時指定,在創建后通常不能更改。在創建數據庫時,可以指定字符集(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進行數據庫的導出/導入,不僅要注意兩服務器端之間的字符集的兼容性,而且要考慮到導出/導入過程中,服務器端與客戶端之間的字符集的兼容性,特別是導出的時候。