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...