教你如何成為Oracle 10g OCP - 第二十一章 全球化支援
國家語言支援
Oracle10g提供了100多種語言和30多種字符集。
21.1 字符集
定義 : 字符集指的是對字元進行編碼的方案。 對於我們看到的所有字元,比如'A',並不是
直接將A存放在資料檔案中,而是將其轉換為一組數字,然後將這些數字轉換為二進位制儲存。
最早的編碼ASCII : 美國資訊交換標準碼(American Standard Code for Information Interchange),
方案中每個英文字母和其他特殊字元都指定了相應的一組編碼。
在Oracle中出現的最早的字符集是US7ASCII, 用來支援ASCII編碼方案,該字符集用單個
位元組(Byte)中的7個bit位來描述一個字元(1Byte=8bit),那麼總共可以表示的字元是128
個(2的7次方,0和1組成7位),這在美國本土夠用,但是在世界其他範圍就不夠了。
隨後Oracle中又出現了8個bit的字符集,也屬於單位元組字符集,可用字元升級到256個,比如
WE8ISO8859P1, 這是在西歐國家使用的,符合ISO標準的編碼。
但是在東歐和一些亞洲國家,還是不夠用,比如中國漢字超過55000個,因此Oracle字符集
中又出現了多位元組字符集,多位元組字元包含兩種型別:
1. 固定長度的位元組數表示一個字元,10g中支援固定長度的多位元組字符集只有1個:AF16UTF16,
主要用於國家字符集。
2. 變化長度的多位元組字符集,採用1到3個位元組(Byte)來表示一個字元,某些字元比如英文
字母,用一個位元組表示, 而其它字元用2個或多個位元組表示,變長多位元組字元多用來表示亞洲
國家語言,比如中文,日文等,這些字符集包括ZHS16GBK、AL32UTF8 (AL=ALL,表適用所有語言) 。
Unicode 編碼方案 --
uni=unique , unicode 表示要推廣為全世界每一個字元提供唯一的編碼的方案,包括UTF-16,
它是unicode的16位編碼方案,是固定長度的多位元組編碼方案,用2個位元組,表示一個unicode
字元,在資料庫中AF16UTF16就是實現UTF-16編碼方案的字符集。
unicode編碼方案還包括UTF-8, 是8位編碼方案,是一種變化長度的多位元組編碼方案,可以使
用1到3個位元組來表示一個unicode字元。 資料庫中AL32UTF8, UTF8就是實現UTF-8編碼方案的字
符集。UTF-8又稱萬國碼。 它對英文使用8位(即一個位元組),中文使用24為(三個位元組)來
編碼。
UTF是 Unicode Translation Format;unicode是一種編碼方式,和ascii是同一個概念,
而UTF是一種儲存方式(格式)。
-------------------------------------------
什麼是UTF-8?它與UNICODE是一回事嗎?
Unicode的最初目標,是用1個16位的編碼來為超過65000字元提供對映。但這還不夠,
它不能覆蓋全部歷史上的文字,也不能解決傳輸的問題(implantation head-ache's),
尤其在那些基於網路的應用中。已有的軟體必須做大量的工作來程式16位的資料。
因此,Unicode用一些基本的保留字元制定了三套編碼方式。它們分別是UTF-8,UTF-16
和UTF-32。正如名字所示,在UTF-8中,字元是以8位序列來編碼的,用一個或幾個位元組
來表示一個字元。這種方式的最大好處,是UTF-8保留了ASCII字元的編碼做為它的一部分,
例如,在UTF-8和ASCII中,“A”的編碼都是0x41.
UTF-16和UTF-32分別是Unicode的16位和32位編碼方式。考慮到最初的目的,通常說
的Unicode就是指UTF-16。在討論Unicode時,搞清楚哪種編碼方式非常重要。Unicdoe相
關的技術介紹參見.
-------------------------------------------
21.2 資料庫字符集
資料庫包括兩個字符集: 資料庫字符集和國家字符集,都是在建立資料庫時指定的,我們
主要使用資料庫字符集,國家字符集則是對資料庫字符集的補充。有關資料庫自帶的PL/SQL
程式包以及SQL語句等,都必須以能相容單位元組的編碼方式來存放。因此如果資料庫中需要
使用固定長度的多位元組字元的話,則不能相容單位元組的編碼方式。因此為了能支援固定長度
的多位元組字元,我們可以將該字符集(固定長度的多位元組字元)指定為國家字符集 。
--------------------------------------------------------------
備註:
我們在DBCA建立資料庫的時候,一般資料庫字符集會選擇使用 Unicode (AL32UTF8),
變化長度的多位元組編碼方案, 這相容上面講到的單位元組的編碼方式; 國家字符集
選擇AL16UTF16 - Unicode UTF-16 通用字符集(固定長度的多位元組字元) .
--------------------------------------------------------------
資料庫字符集 ---
Oracle 資料庫對以下項使用資料庫字符集:
A. 以 CHAR 資料型別 (CHAR、VARCHAR2、CLOB 和 LONG) 儲存的資料
B. 識別符號,如表名、列名和 PL/SQL 變數
C. 輸入並儲存 SQL 和 PL/SQL 程式原始碼
國家字符集 ---
國家字符集是一個備用字符集,利用此字符集可以在沒有Unicode 資料庫字符集的資料庫
中儲存 Unicode 字元。選擇國家字符集的其它原因如下:
A. 對於頻繁的字元處理操作,不同的字元編碼方案可能更為理想
B. 使用國家字符集時程式設計更容易
如果表的列的資料型別定義為NCHAR, NVARCHAR2, NCLOB等,則其中存放的資料使用
國家字符集進行編碼。
透過 nls_database_parameters 檢視當前資料庫字符集和國家字符集。一旦建立了資料庫,
就不應該再修改字符集。修改字符集的命令:
SQL> alter database character set
也可以透過 PROPS$ 檢視字符集 。
21.3 客戶端字符集
透過設定環境變數來定義客戶端的字符集
NLS_LANG=
例子:
C:\> set NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK
說明語言為簡體中文,區域為中國,字符集為ZHS16GBK
檢視v$nls_valid_values 裡記錄了可以為language,territory及客戶端字符集所設定的
合法值。
在Windows中可以透過修改登錄檔來指定客戶端的字符集資訊。
HKEY_LOCAL_MACHINE\\SOFTWARE\\Oracle\\HOME0
如果在unix或Linux下面可以透過export方式設定:
$export NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK
我們在客戶端登陸到資料庫後,session相關的語言環境由客戶端的nls_lang進行設定。
我們可以透過alter session set 來覆蓋nls_lang的設定。
備註: nls_language是伺服器端的屬性,nls_lang是客戶端的屬性
21.4 客戶端字符集與伺服器端字符集的轉換
先了解一下超集和子集的關係:
http://space.itpub.net/35489/viewspace-676403
顯示為"靠","?" 或者 顛倒過來的 "?" 的原因分析:
http://lastwinner.itpub.net/post/7102/45628
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/35489/viewspace-676406/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 教你如何成為Oracle 10g OCP - 第二十章 安全Oracle 10g
- 教你如何成為Oracle 10g OCP - 第一章學習Oracle 10g
- 教你如何成為Oracle 10g OCP - 第十一章 配置網路環境Oracle 10g
- 教你如何成為Oracle 10g OCP - 第十六章 ASM管理Oracle 10gASM
- 教你如何成為Oracle 10g OCP - 第十四章 閃回Oracle 10g
- 教你如何成為Oracle 10g OCP - 第九章 物件管理Oracle 10g物件
- 教你如何成為Oracle 10g OCP - 第九章 物件管理(2)Oracle 10g物件
- 教你如何成為Oracle 10g OCP - 第九章 物件管理(3)Oracle 10g物件
- 教你如何成為Oracle 10g OCP - 第九章 物件管理(4)Oracle 10g物件
- 教你如何成為Oracle 10g OCP - 第六章 儲存管理Oracle 10g
- 教你如何成為Oracle 10g OCP - 第十九章 資料遷移Oracle 10g
- 教你如何成為Oracle 10g OCP - 第九章 物件管理(5) - 索引Oracle 10g物件索引
- 教你如何成為Oracle 10g OCP - 第七章 undo表空間管理Oracle 10g
- 教你如何成為Oracle 10g OCP - 第十五章 自動化管理Oracle 10g
- 教你如何成為Oracle 10g OCP - 第五章 記憶體元件與Oracle程式Oracle 10g記憶體元件
- 教你如何成為Oracle 10g OCP - 第三章 資料字典學習Oracle 10g
- 教你如何成為Oracle 10g OCP - 第十三章補充:RMAN的組成及工作原理Oracle 10g
- 【刪除】教你如何成為Oracle 10g OCP - 第十五章 自動化管理Oracle 10g
- 教你如何成為Oracle 10g OCP - 第二章學習 安裝及建庫Oracle 10g
- 教你如何成為Oracle 10g OCP - 第九章 物件管理(8) - 如何重建B樹索引Oracle 10g物件索引
- 教你如何成為Oracle 10g OCP - 第十三章 RMAN管理的備份與恢復Oracle 10g
- 教你如何成為Oracle 10g OCP - 第九章 物件管理(9) - 點陣圖(Bitmap)索引Oracle 10g物件索引
- 教你如何成為Oracle 10g OCP - 第九章 物件管理(10) - 點陣圖(Bitmap)索引Oracle 10g物件索引
- 教你如何成為Oracle 10g OCP - 第九章 物件管理(11) - 管理索引,sequence及resumableOracle 10g物件索引
- 教你如何成為Oracle 10g OCP - 第十二章 手工管理的備份與恢復Oracle 10g
- 教你如何成為Oracle 10g OCP - 第十章 閂鎖、鎖定和併發性Oracle 10g
- 教你如何成為Oracle 10g OCP - 第四章 初始化引數和例項Oracle 10g
- 教你如何成為Oracle 10g OCP - 第八章 使用者、許可權和角色管理Oracle 10g
- 教你如何成為Oracle 10g OCP - 第十三章補充:RMAN備份使用PGA還是SGAOracle 10g
- 教你如何成為Oracle 10g OCP - 第九章 物件管理(6) - B樹索引的訪問Oracle 10g物件索引
- 教你如何成為Oracle 10g OCP - 第十三章補充:RMAN為什麼不備份online redoOracle 10g
- 準備看看這本書 - ORACLE資料庫技術實用詳解:教你如何成為10g OCPOracle資料庫
- 教你如何成為Oracle 10g OCP - 第八章 使用者、許可權和角色管理01Oracle 10g
- 教你如何成為Oracle 10g OCP - 第九章 物件管理(9) - 重建索引對效能的影響Oracle 10g物件索引
- 教你如何成為Oracle 10g OCP - 第九章 物件管理(7) - B樹索引的對於DELETE的管理Oracle 10g物件索引delete
- 教你如何成為Eclipse熱鍵高手Eclipse
- 十步讓你成為Oracle 10g DBAOracle 10g
- oracle 10g ocp043 文章1Oracle 10g