1. Oracle 字符集定義
Oracle 字符集:按照特定的字符編碼方案,對一組特定的字符,符號,分別賦予不同數值編碼的集合。
Oracle的字符集命名遵循以下命名規則:
<Language><bit size><encoding>
即: <語言><比特位數><編碼>
例如:
1. US7ASCII其中US代表America地區,7位,ASCII字符編碼。它是 Oracle數據庫最早支持的編碼方案
2. ZHS16GBK 表示採用GBK編碼格式、16位(兩個字節)簡體中文字符。2個字節存放一個漢字。
3. zhs16cgb231280 表示採用cgb231280編碼格式、16位(兩個字節)簡體中文字符。2個字節存放一個漢字。
4. AL32UTF8 其中AL代表ALL,指適用於所有語言。32位,3個字節存放一個亞洲語言字符。UTF-8,8位Unicode編碼方式。
5. AF16UTF16 其中AF代表ALL Fix, 適用於所有語言。16位,所有的字符以2個字節存放。UTF-16,16位Unicode編碼方式。
2. 字符編碼方案
2.1 單字節編碼
單字節編碼有7位字符集和8位的字符集。特點是,每個字符用一個字節表示。
1)單字節7位字符集,最常用的字符集爲US7ASCII。
2)單字節8位字符集,適合於歐洲大部分國家 例如:WE8ISO8859P1(西歐、8位、ISO標準8859P1編碼)
2.2 多字節編碼
多字節編碼有變長多字節編碼和定長多字節編碼。
1)變長多字節編碼,它是指某些字符用一個字節表示,某些字符可以用2個或多個字節表示。例如,在一段文本中,既有歐美字符,也有亞洲語言字符,此時爲了支持對亞洲語言的支持,我們需要用變長多字節編碼。總之,變長多字節編碼常用於對亞洲語言的支持, 例如日語、漢語、印地語等。常用的編碼有:AL32UTF8,zhs16cgb231280。
例如:Oracle數據庫指定了AL32UTF8字符集,並且創建了一個varchar(20)字段。如果要存放漢字的話,能存放幾個呢?
由於指定了AL32UTF8字符集,因此,3個字節存放一個漢字。此外,創建了varchar(20)字段,表示varchar類型字段,最多能存儲20個字節的漢字。因此我們可以推斷出,這個字段最多能存放6個漢字。
2)定長多字節編碼,每一個字符都使用固定長度字節的編碼方案,僅用於國家字符集。目前oracle唯一支持的定長多字節編碼是AF16UTF16。
3. Unicode 編碼
Unicode 編碼涵蓋了全世界所有已知字符的編碼,是一種變長或多長的多字節編碼方式。換句話說,它支持單字節和多字節的編碼方式。目前Unicode有3.0版本和5.0版本。Unicode 5.0相比Unicode3.0 ,又增加了一些新的補充字符。Oracle unicde 編碼方式有兩類:一個是UTF-8, 另一個是UTF-16。
1) UTF-8是Unicode 8位的編碼方式,它是一種變長多字節的編碼,這種編碼方式可以用1,2,3個字節來表示一個Unicode字符。例如:AL32UTF8,UTF8、UTFE。
2) UTF-16是Unicode 16位的編碼方式,它是一種定長多字節的編碼,這種編碼只能用2個字節來表示一個Unicode字符。例如:AF16UTF16。
4. 字符集超級
當一種字符集(字符集A)的編碼數值包含所有另一種字符集(字符集B)的編碼數值,並且兩種字符集相同編碼數值代表相同的字符時,則字符集A是字符集B的超級,或稱字符集B是字符集A的子集。Oracle8i和oracle9i官方文檔資料中備有子集-超級對照表(subsetsupersetpairs),例如:WE8ISO8859P1是WE8MSWIN1252的子集。由於US7ASCII是最早的Oracle數據庫編碼格式,因此有許多 字符集是US7ASCII的超集,例如WE8ISO8859P1、ZHS16CGB231280、ZHS16GBK都是US7ASCII的超集。
5. Oracle數據庫字符集(Oracle服務器端字符集)
Oracle服務器端字符集是在創建數據庫時候指定的,在創建後通常不能更改。在創建數據庫時,可以指定庫字符集和國家字符集。
1)庫字符集,它是Oracle基本的字符集,它支持單字節字符集,變長多字節字符集。作用是:
- 用來存儲CHAR, VARCHAR2,BLOB, LONG等類型數據。
- 用來標識表名,列名,和PL/SQL變量名。
- 用來存儲SQL,PL/SQL存儲單元。
2)國家字符集,它是Oracle附加的字符集,其目的是爲了增加Oracle 字符的處理能力。它解決了NCHAR等類型的定長多字節的編碼的數據支持,然而Oracle的基本字符集並不能支持這點。國家字符集在oracle9i中進行了重新定義,只能在unicode編碼中的AF16UTF16和UTF8 中選擇,默認值是AF16UTF16。作用是:
- 用來存儲NCHAR, NVARCHAR2,NBLOB, NLONG等類型的數據。
6. 客戶端字符集
客戶端的字符集,是客戶端定義的字符數據的編碼方式。對所有來自客戶端和發自客戶端的字符數據均使用客戶端定義的字符編碼方式。客戶端可以看作是能與數據庫直接
連接的各種應用,如PL/SQL.Imp/Exp等。在Oralce裏,客戶端字符集是通過NLS_LANG參數設定的。