字符集問題的初步探討(二)
2024-07-21 02:07:42
供稿:網友
字符集問題的初步探討(二)
--數據庫的字符集
saturday, 2004-09-11 11:38 eygle
原文發表于itpub技術叢書《oracle數據庫dba專題技術精粹》,未經許可,嚴禁轉載本文.
原文鏈接:
http://www.eygle.com/special/nls_character_set_02.htm
2. 數據庫的字符集
字符集在創建數據庫時指定,在創建后通常不能更改,所以在創建數據庫時能否選擇一個正確的字符集就顯得尤為重要。
在創建數據庫時,我們可以指定字符集(character set)和國家字符集(national character set)。
字符集用來存儲:
char, varchar2, clob, long等類型數據
用來標示諸如表名、列名以及pl/sql變量等
sql和pl/sql程序單元等
國家字符集用以存儲:
nchar, nvarchar2, nclob等類型數據
這些設置在數據庫創建時指定,我們可以看一下數據庫的創建腳本:
connect sys/change_on_install as sysdba
set echo on
spool e:/oracle/ora92/assistants/dbca/logs/createdb.log
startup nomount pfile="e:/oracle/admin/eygle cripts/init.ora";
create database eygle
maxinstances 1
maxloghistory 1
maxlogfiles 5
maxlogmembers 3
maxdatafiles 100
datafile 'e:/oracle/oradata/eygle ystem01.dbf' size 250m reuse autoextend on next 10240k maxsize unlimited
extent management local
default temporary tablespace temp tempfile 'e:/oracle/oradata/eygle/temp01.dbf' size 40m reuse autoextend
on next 640k maxsize unlimited
undo tablespace "undotbs1" datafile 'e:/oracle/oradata/eygle/undotbs01.dbf' size 50m reuse autoextend
on next 5120k maxsize unlimited
character set zhs16gbk
national character set al16utf16
logfile group 1 ('e:/oracle/oradata/eygle/redo01.log') size 10m,
group 2 ('e:/oracle/oradata/eygle/redo02.log') size 10m,
group 3 ('e:/oracle/oradata/eygle/redo03.log') size 10m;
spool off
exit;
以上用粗體顯示的就是對我們至關重要的字符集設置。
在創建數據庫的過程中,在以下界面選擇你的字符集,對于簡體中文平臺,缺省的字符集是:zhs16gbk
一旦你的字符集選定了,數據庫中能夠存儲的字符就受到了限制,所以你選擇的字符集的應該可以容納所有你將用到字符。
常見的中文字符集有:
zhs16cgb231280 cgb2312-80 16-bit simplified chinese mb, ascii
zhs16gbk gbk 16-bit simplified chinese mb, ascii, udc
其中gb2312碼是中華人民共和國國家漢字信息交換用編碼,全稱《信息交換用漢字編碼字符集--基本集》,由國家標準總局發布,
1981年5月1日實施,通行于大陸。新加坡等地也使用此編碼。
gbk編碼是1995年12月頒布的指導性規范。
gbk與國家標準 gb 2312-80 信息處理交換碼所對應的、事實上的內碼標準兼容;同時,在字匯一級支持 iso/iec 10646-1 和
gb 13000-1 的全部中日韓 (cjk) 漢字(20902字)。包含了更多的編碼。
但是我們說,zhs16gbk 并非是zhs16cgb231280的嚴格超集(雖然后者的漢字在前者中都存在,但是同樣的編碼在不同兩個
字符集中可能表達不同的漢字),所以在做數據庫字符轉換時仍然需要特別注意。
oracle的字符集命名遵循以下命名規則:
<language><bit size><encoding>
即: <語言> <比特位數><編碼>
比如: zhs · 16 ·gbk
需要說明的是,有些字符集命名違背了這個規范,oracle8/oralce8i中的utf-8是第一個打破這個命名規范的字符集。
我們可以看到一類字符集以 al開頭,如:
al16utf16
其中 al代表 all,指適用于所有語言(all languages),按照這個標準當年utf-8本應被命名為al24utf8。
本文來源于網頁設計愛好者web開發社區http://www.html.org.cn收集整理,歡迎訪問。