oracle字元型別對比認識

2021-05-24 08:12:41 字數 4988 閱讀 9903

author:skate
time:2011-02-21
oracle字元型別對比認識

oracle9i

以上版本裡,我們再為字串選擇資料型別時,主要就是三種:

char

(size

),varchar2(size)

,nvarchar2(size)

varchar2(size)

: 可變長度的字串,其最大長度為

size

個位元組。

size

的最大值是

4000

,而最小值是

1。您必須指定乙個

varchar2

的size

char

(size

):固定位元組字串,最大長度為

size

個位元組,

size

最大長度為

2000

nvarchar2(size)

:可變長度的字串

,它在儲存字元時,是根據所選的國家字符集來計算字元占用的位元組數,

其最大長度為

size

個字元或位元組。

size

的最大值取決於儲存每個字元所需要的位元組數,其上限為

4000

個位元組。您必須為

nvarchar2

指定乙個

size

。varchar2

與nvarchar2

的不同之處在於它們存放資訊占用的空間不同。

varchar2

存放的英文本元只佔乙個位元組,而

nvarchar2

依據所選的字符集,大多為兩個。

既然提到字符集,那就簡單了解下字元編碼
對於多國語言,在計算機世界裡,常用的字元編碼有:

ascii

,ansi

編碼(本地),

unicode

編碼(國際化)。

這三種編碼方法只是概念,如果要在計算機實際環境裡實現,就需要不同的演算法標準完成。
ascii:

是通過一種單位元組編碼實現的,具體有

7位編碼和

8位編碼。

ansi

編碼(本地化)

:

是一種多位元組編碼,是不同的國家根據表示自己的語言的一種編碼方式,因為不同

ansi

編碼採用不同規定標準,

如果乙個多位元組字串採用非正確的

ansi

編碼,將會「亂碼「。

unicode

(國際化):

在計算機世界裡,為了使國際間資訊交流更加方便,國際組織制定了

unicode

字符集,為各種語言中的每乙個

字元設定了統一並且唯一的數字編號,以滿足跨語言、跨平台進行文字轉換、處理的要求。雖然

unicode

的乙個

字元編碼是確定的,但是在實際儲存或傳輸中,

由於不同

系統平台

的設計不一定一致,以及出於節省空間的目的,

unicode

編碼的實現方式有所不同。

unicode

的實現方式稱為

unicode

轉換格式

(unicode translation format

簡稱為

utf)。目前實際應用的

unicode

版本對應於

ucs-2

,使用16位

的編碼空間。也就是每個字元占用2個

位元組。

如果對於某些字元可以乙個位元組表示的,如果要用原

unicode

編碼,那實在是太浪費了啊,

可以使用

utf-8

編碼,這

是一種變長編碼,它將基本7位

ascii

字元仍用

7位編碼表示,占用乙個位元組(首位補

0)。而遇到與其他

unicode

符混合的情況,將按一定演算法轉換,每個字元使用

1-3個位元組編碼,並利用首位為0或

1進行識別。這樣對以7位

ascii

字元為主的西文文件就大大節省了編碼長度

。類似的,對未來會出現的需要

4個位元組

編碼的字元,

2位元組編碼的

utf-16

也需要通過一定的演算法進行轉換。

utf-8

和utf-16

只是unicode

編碼在計算機裡的實現。

unicode

的實現方式

除了以上的方式外,

還包括utf-7

、punycode

、cesu-8

、scsu

、utf-32

等,這些實現方式有

些僅在一定的國家和地區使用,有些則屬於未來的規劃方式。目前通用的實現方式是

utf-16

小尾序(

le)、

utf-16

大尾

序(

be)和

utf-8

。在微軟公司

windows xp

作業系統

附帶的記事本

(notepad

)中,「另存為」

對話方塊可以選擇的四

種編碼方式除去非

unicode

編碼的ansi

(對於英文系統即

ascii

編碼,中文系統則為

gb2312

或big5

編碼)外,其餘三

種為「

unicode

」(對應

utf-16 le

)、「unicode big endian

」(對應

utf-16 be

)和「utf-8」

utf-8, 8bit

編碼, ascii不作變換, 其他字元做變長編碼, 每個字元1-3 byte. 通常作為外碼. 有以下優點:

1.與cpu位元組順序無關, 可以在不同平台之間交流

2.容錯能力高, 任何乙個位元組損壞後, 最多隻會導致乙個編碼碼位損失, 不會聯鎖錯誤

(

如gb碼錯乙個位元組就會整行亂碼) 。

utf-16, 16bit

編碼,

是變長碼

, 大致相當於

20位編碼

, 值在0到

0x10ffff

之間,

基本上就是

unicode

編碼的實現

.

它是變長碼, 與

cpu字序有關

, 但因為最省空間

, 常作為網路傳輸的外碼,

utf-16

是unicode

的preferred encoding

已經簡單了解字符集,那我們在實際使用中如何避免錯誤使用字符集導致亂碼呢?

檢視資料庫伺服器字符集:

select * from nls_database_parameters;///

其**於

props$

,是表示資料庫的字符集。

檢視客戶端字符集環境:

select * from nls_instance_parameters;///

其**於

v$parameter

,表示客戶端的字符集的設定,可能是引數檔案,環境變數或者是登錄檔

檢視會話字符集環境:

select * from nls_session_parameters;///

其**於

v$nls_parameters

,表示會話自己的設定,可能是會話的環境變數或者是

alter session

完成,

如果會話沒有特殊的設定,將與

nls_instance_parameters

一致。

客戶端的字符集要求與伺服器一致或者被包容,才能正確顯示資料庫的非

ascii

字元。如果多個設定存在的時候,

alter session>

環境變數

>

引數檔案

------end-------

oracle幾種字元型別總結

這篇對oracle幾種字元型別總結的比較好,收藏了。一 char與varchar四種 四個型別都屬於變長字元型別,varchar和varchar2的區別在與後者把所有字元都佔兩位元組,前者只對漢字和全形等字元佔兩位元組。nvarchar和nvarchar2的區別和上面一樣,與上面區別在於是根據uni...

oracle基本認識

資料庫的三個常用的使用者及預設密碼 sys change on install system manager scott tiger oracle客戶端 sqlplus oracle自帶的 1 oracle的安裝目錄中找到sqlplus 2 命令列中輸入 sqlplus username passw...

Oracle認識整合

先回顧一下資料庫的認識 通常資料庫分為兩種 一種是非關係型資料庫,一種為關係型資料庫 還有比如是介於兩者之間分布式檔案儲存,還有擴充套件了關係型資料庫的物件關聯式資料庫 nosql,nosql not only sql 是對不同於傳統的 關聯式資料庫 的 資料庫管理系統 的統稱。允許部分資料使用sq...