程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SyBase數據庫 >> SyBase教程 >> DBA字符集管理(一)

DBA字符集管理(一)

編輯:SyBase教程

DBA字符集管理(一)


最近對字符集進行了相關的學習,通過查看相關書籍、在網上找找學習視頻,在此結合學習筆記對字符集做一次簡單總結。

通過一種自問自答的形式,希望可以幫助讀者對字符集的知識做一次梳理。

【不恥下問】

問題1:字符集的概念?

字符集,是字符和編碼的對應“表”,我們可以把其理解成一張對應表。之所以需要字符集,是由於計算機中只能存儲數字,我們想通過計算機獲得字符,因此采用了一個手段,讓計算機將字符對應成編碼存儲起來,這樣計算機通過查找數字編碼就可以找到相應的字符,從而實現顯示字符的目的。

\

問題2:在IT系統體系中,哪些結構是存在字符集的?

1、操作系統有操作系統字符集;

2、oracle有數據庫字符集;

3、其它軟件本身所帶的字符集。

問題3:查看字符集的命令?

win:chcp

\

linux下面查看字符集:

[root@bjbank ~]# locale

\

locale -a//linux所支持的所有字符集

oracle下面查看字符集:

SQL> select * from v$NLS_PARAMETERS;

\

 

補充:字符集常識

zh_HK.big5hkscs:大五碼:香港用的!
unicode: 國家字符集
zh_SG.gbk:國標庫
936:windows操作系統下代表中文字符集
補充完畢。

問題4:字符集的使用情況?

需要存儲和顯示字符的時候會用到字符集。在一個系統中,例如oracle本身自帶有字符集,因此oracle使用本身的字符集。而有些軟件是不帶字符集的,它們會選擇使用操作系統字符集。所以在判斷軟件使用的字符集是什麼的前提下,先確定軟件是使用本身自帶的字符集還是使用操作系統的字符集。

對於數據庫字符集,在數據類型的選擇上,如果不存在字符型的數據類型,可以不考慮字符集。但日常的應用系統中,數據庫中都會存在如varchar2這樣的數據類型,這是一定要用到字符集的。因為這樣的字段下用來存儲的是字符。如char、varchar2、clob、long這些都是用來存放字符的。char代表定長的,varchar2代表變長的,clob代表大對象,比如說一篇文章,long代表大對象。

另外,數據中字符集還是用來標示諸如表名、列名以及PL/SQL變量等。同時數據庫中的字符集也可以用來存儲SQL和PL/SQL程序單元等。

除了數據庫字符集以外,另外一種是國家字符集。它是用來存儲NCHAR、NVARCHAR2、NCLOB等類型數據。也就是如果數據類型為varchar2這類,數據庫會選擇數據庫字符集,如果是NVARCHAR2這類,數據庫會選擇使用國家字符集。

對於數據庫字符集和國家字符集,我們可以直觀的看一下。在oracle安裝過程中,有兩個地方涉及到設置字符集,1、數據庫字符集、2、國家字符集。如下圖:

\

實驗:查看數據庫的字符集?

SQL> select * from nls_database_parameters

\

數據庫字符集:NLS_CHARACTERSET:zhs16gbk:中文字符集

NLS_NCHAR_CHARACTERSET:國家字符集:AL16UTF16

國家字符集是作為數據庫字符集的一種補充。

問題5:字符集的命名?

字符集根據存儲字符的不同區分出不同的字符集種類,關注字符集時需要留意字符集可以存儲哪些字符。

舉幾個字符集的例子:

1、US7ASCII:只能存儲美國人使用的字符。不超過128個。ASC碼是用1個字節8位表示格式:US代表語言,7代表七位,ASCII代表編碼。

2、zhs16cgb231280:中文字符集(國標),較老的字符集,其中並未存儲完全所有中文字符。

3、zhs16gbk:最新的中文字符集。是zhs16cgb231280的超集。但不意味著嚴格超集(嚴格超集規定字符編碼是相同的才可以叫嚴格超集)。

4、utf8:屬於unicode字符集,unicode字符集是很多國家聯合起來制定的標准。用來存儲多國語言的字符集。之後推出了utf8,但並未做到unicode那樣存儲所有國家的字符集。

5、AL32UTF8:屬於unicode字符集,比較新的,比utf8范圍廣的字符集。如果要用unicode字符集就選用AL32UTF8字符集。通常對於數據庫字符集會選擇AL32UTF8。

6、AF16UTF16:屬於unicode字符集,對於國家字符集,一般統一選擇“AF16UTF16”。AF16UTF16字符集也是unicode字符集。

如果規劃數據庫會存儲中文字符,國家字符集一般選擇“AF16UTF16”。數據庫字符集設為“AL32UTF8”或“ZHS16GBK”。但是AL32UTF8字符集中,中文字符所對應的編碼會占用更多的空間。也就是說AL32UTF8字符集在性能上會差一些(雖然全,但性能會打折扣,因為會占用更大的空間意味著網絡、I/O等會有更大的負載)。因此,我們在數據庫字符集上常常選擇“ZHS16GBK”。

小結:

(1)、數據庫字符集的選擇,如果只存中文,選擇zhs16gbk,如果是國際跨國企業,選擇AL32UTF8字符集;

(2)、國家字符集選擇“AF16UTF16”。

問題6:如何查看我們可以選擇的字符集有哪些?

SQL> select * from v$NLS_VALID_VALUES;

--可以查看到oracle支持499種字符集

\

通過以上我們可以知道,oracle支持所有字符集。

問題7:對於跨國企業,需要選擇怎樣的字符集?

比如說oracle公司存在美國員工、中國員工、韓國員工、日本員工,需要存儲多國的語言,因此選擇unicode字符集。

問題8:對於繁體字符集選擇應該注意哪些?

對於繁體字符集分為香港和台灣兩種,香港常使用香港大五碼,台灣常使用台灣的字符集。

問題9:字符集命名規則?

<語言><比特位數><編碼>

例:ZHS16GBK:中文,16位,國標庫字符集

常用字符集,參看問題5。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved