DBA字符集管理(一)

2022-04-01 14:18:53 字數 2613 閱讀 3402

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

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

【不恥下問】

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

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

2、oracle有資料庫字符集;

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作業系統下代表中文字符集

補充完畢。

需要儲存和顯示字元的時候會用到字符集。在乙個系統中,例如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

國家字符集是作為資料庫字符集的一種補充。

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

舉幾個字符集的例子:

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」。

sql> select * from v$nls_valid_values;

--可以檢視到oracle支援499種字符集

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

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

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

語位元位編

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

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

mysql api 字符集 MySQL字符集

mysql字符集包括字符集 character 和 collation 兩個概念。字符集是用來定義mysql儲存字串的規則,校對規則則是定義了比較字串的方式。字串和校對規則是一對多的 關係。使用命令 show collation like gbk 可檢視相關的校對規則 使用 show charact...

Unicode字符集和多字符集

由於各國語言的加入,ascii已經不能滿足資訊交流的需要,因此,為了能夠表示其它國家的文字,各國在ascii的基礎上制定了自己的字符集,它們正式的名稱應該是mbcs multi byte chactacter system,即多位元組字元系統 型別說明 unicode ansi 通用型別 字元wch...

mysql 集群字符集 Mysql 字符集

字符集與字元比較 字符集字符集是某種字元的集合,比如最常見的ascii碼,由127個字元組成,只需要乙個位元組就能表示 我們常說的字符集還是gbk iso utf8 mysql 我們使用得最多的字符集就是gbk 和 utf8了 他們都是變長字符集,如果字元在ascii範圍內就使用乙個位元組表示,其他...