字符集問題的初步探討(一)
2024-07-21 02:07:42
供稿:網友
原文發表于itpub技術叢書《oracle數據庫dba專題技術精粹》,未經許可,嚴禁轉載本文.
原文鏈接:
http://www.eygle.com/special/nls_character_set_01.htm
oracle全球支持(即globalization support)允許我們使用本地語言和格式來存儲和檢索數據。通過全球支持,oracle可以支持多種語言及字符集,得以展示數據庫的強大魅力。
由于不同語言及字符集的共同存儲存在設置上具有一定的復雜性,字符集一度成為普遍困擾大家的一個主要問題。
本文試圖就一些常見問題進行探討,希望可以把一些實際經驗共享給大家!
1. 字符集的基本知識
如果從頭說起,字符集最早的編碼方案來自于與ascii.
這也是我們最常見的編碼方式。該方案起源于1960年代初期,最初是美國國會圖書館制定用來作為美國圖書館界書目交換的共同標準,最后完善成為美國的國家標準ascii(american standard codefor information interchange),之后進一步演變成世界性的計算機字符編碼標準iso646(其全名為7-bit coded character set for information interchange)。成為計算機編碼方案的基礎。
oracle數據庫最早支持的編碼方案也就是us7ascii.
但是我們知道,英文字符一般是以一個字節來存儲的,7位的編碼方案最多只能代表128個字符;經過擴展的8位的編碼方案也只能代表256個字符,這遠遠不能滿足計算機發展的需要,對于亞洲國家復雜的字符存儲需要更多的碼位,于是各種編碼方案隨之而生。
為了容納全世界各種語言的所有字符和符號,解決不同編碼之間的兼容和轉換問題,1991年元月,10多家公司共同出資,組建unicode協會,隨后unicode編碼產生了。
unicode協會的口號是: 給每個字符提供了一個唯一的數字,不論是什么平臺,不論是什么程序,不論什么語言。
最初unicode編碼使用2-byte(16bit)來進行編碼,但是最多只能容納65536個字符,仍然不夠使用,后來進行了擴充,也就是unicode3.1標準,增加了額外的補充字符定義,現在unicode4.0標準已經發布,具體可以參考unicode官方站點:
www.unicode.org
unicode編碼方案主要有三個實施標準:
utf-8
usc-2
utf-16
oracle從7.2開始支持utf-8編碼,提供unicode編碼支持。
按照各種標準的含義,oracle推薦,如果你的數據庫需要存放不同語言的不同符號和字符,建議使用unicode編碼方案。誠然,unicode方案可以表示更多的字符,但是由于多位的存儲,需要額外的存儲空間和網絡傳輸,所以選擇最適合的數據庫字符集仍然需要慎重考慮。