資料庫的編碼淺談(ZHS16GBK與US7ASCII)

flysky0814發表於2007-11-15

SQL> SELECT RAWTOHEX('郭A軍') from dual;

B9F941BEFC

SQL> select dump('郭A軍') from dual;

Typ=96 Len=5: 185,249,65,190,252

SQL> select chr(185)||chr(249)||chr(65)||chr(190)||chr(252) from dual;

郭A軍

請注意:在ASC碼和十六進位制碼中,185對應B9,249對應F9,65對應41,190對應BE,252對應FC

而編碼時,185,249兩個位元組構成"郭"字,65一個位元組構成"A"字,190,252兩個位元組構成"軍"字.

本機測試環境中編碼是US7ASCII,是一個位元組為一個儲存單位,對於中文字的處理方式是用兩個儲存單位連線起來形成中文字的.

若編碼為ZHS16GBK,則是二個位元組為一個儲存單位,其差異性可體現在查ASCII碼值上邊.

如先在US7ASCII的環境中查"郭"的ASCII碼:

SQL> select ascii('郭') from dual;

185
象前邊已經介紹過的,在此種編碼中是用ASCII碼值為185,249的兩個位元組拼起來形成"郭"字的,故按ASCII( )函式的原理,會取第一個位元組的ASCII值.

在US7ASCII的環境中查"郭"的ASCII碼:

SQL> select ascii('郭') from dual;

47609

因為它是用兩個位元組儲存的,也可以這樣計算


SQL> select 185*256+249 from dual;

47609

為什麼這樣算,相信大家都懂吧,不用多說了....

學習筆記而已!

[@more@]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/11423276/viewspace-982526/,如需轉載,請註明出處,否則將追究法律責任。

相關文章