oracle幾種字元型別總結

2021-07-31 17:43:28 字數 3698 閱讀 9946

這篇對oracle幾種字元型別總結的比較好,收藏了。

一 char與varchar四種

四個型別都屬於變長字元型別,varchar和varchar2的區別在與後者把所有字元都佔兩位元組,前者只對漢字和全形等字元佔兩位元組。

nvarchar和nvarchar2的區別和上面一樣, 與上面區別在於是根據unicode 標準所進行的定義的型別,通常用於支援多國語言類似系統的定義。

1.char

char的長度是固定的,比如,定義了char(20),即使插入abc,不足二十個位元組,資料庫也會在abc後面自動加上17個空格,以補足二十個位元組;

char是區分中英文的,中文在char中佔兩個位元組,而英文佔乙個,所以char(20)你只能存20個字母或10個漢字。

char適用於長度比較固定的,一般不含中文的情況

2.varchar/varchar2

varchar是長度不固定的,比如說,你定義了varchar(20),當你插入abc,則在資料庫中只佔3個位元組。

varchar同樣區分中英文,這點同char。

varchar2基本上等同於varchar,它是oracle自己定義的乙個非工業標準varchar,不同在於,varchar2用null代替varchar的空字串

varchar/varchar2適用於長度不固定的,一般不含中文的情況

3.nvarchar/nvarchar2

nvarchar和nvarchar2是長度不固定的

nvarchar不區分中英文,比如說:你定義了nvarchar(20),你可以存入20個英文本母/漢字或中英文組合,這個20定義的是字元數而不是位元組數

nvarchar2基本上等同於nvarchar,不同在於nvarchar2中存的英文本母也佔兩個位元組

nvarchar/nvarchar2適用於存放中文

char [ ( n ) ]

固定長度,非 unicode 字元資料,長度為 n 個位元組。n 的取值範圍為 1 至 8,000,儲存大小是 n 個位元組。

varchar [ ( n | max ) ]

可變長度,非 unicode 字元資料。n 的取值範圍為 1 至 8,000。max 指示最大儲存大小是 2^31-1 個位元組。儲存大小是輸入資料的實際長度加 2個位元組,用於反映儲存的資料的長度。所輸入資料的長度可以為 0 個字元。

* 如果列資料項的大小一致,則使用 char。

* 如果列資料項的大小差異相當大,則使用 varchar。

* 如果列資料項大小相差很大,而且大小可能超過 8,000 位元組,請使用 varchar(max)。

如果未在資料定義或變數宣告語句中char 或 varchar 資料型別指定 n,則預設長度為 1。

如果在使用 cast 和 convert 函式時char 或 varchar 資料型別未指定 n,則預設長度為 30。

當執行 create table 或 alter table 時,如果 set ansi_padding 為 off,則定義為 null 的 char 列將作為 varchar 處理。

另外幫助理解的,只供參考:**

也可參照學習

1.null值(空值)。

a. char列的null值占用儲存空間。

b. varcahr列的null值不占用儲存空間。

c. 插入同樣數量的null值,varchar列的插入效率明顯高出char列。

2.插入資料

無論插入資料涉及的列是否建立索引,char的效率都明顯低於varchar。

3. 更新資料

如果更新的列上未建立索引,則char的效率低於varchar,差異不大;建立索引的話,效率較高。

4. 修改結構

a. 無論增加或是刪除的列的型別是char還是varchar,操作都能較快的完成,而且效率上沒有什麼差異。

b. 對於增加列的寬度而言,char與varchar有非常明顯的效率差異,修改varcahr列基本上不花費時間,而修改char列需要花費很長的時間。

5.資料檢索

無論是否通過索引,varchar型別的資料檢索略優於char的掃瞄。

選擇char還是選擇varchar的建議

1.適宜於char的情況:

a. 列中的各行資料長度基本一致,長度變化不超過50位元組;

b. 資料變更頻繁,資料檢索的需求較少。

c. 列的長度不會變化,修改char型別列的寬度的代價比較大。

d. 列中不會出現大量的null值。

e. 列上不需要建立過多的索引,過多的索引對char列的資料變更影響較大。

2.適宜於varchar的情況;

a. 列中的各行資料的長度差異比較大。

b. 列中資料的更新非常少,但查詢非常頻繁。

c. 列中經常沒有資料,為null值或為空值

nchar [ ( n ) ]

n 個字元的固定長度的 unicode 字元資料。n 值必須在 1 到 4,000 之間(含)。儲存大小為兩倍 n 位元組。

nvarchar [ ( n | max ) ]

可變長度 unicode 字元資料。n 值在 1 到 4,000 之間(含)。max 指示最大儲存大小為 2^31-1 位元組。

儲存大小是所輸入字元個數的兩倍 + 2 個位元組。所輸入資料的長度可以為 0 個字元。

注釋如果沒有在資料定義或變數宣告語句中指定 n,則預設長度為 1。如果沒有使用 cast 函式指定 n,則預設長度為 30。

如果列資料項的大小可能相同,請使用 nchar。

如果列資料項的大小可能差異很大,請使用 nvarchar。

sysname 是系統提供的使用者定義資料型別,除了不可為空值外,在功能上與 nvarchar(128) 相同。sysname 用於引用資料庫物件名。

為使用 nchar 或 nvarchar 的物件分配的是預設的資料庫排序規則,但可使用 collate 子句分配特定的排序規則。

set ansi_padding on 永遠適用於 nchar 和 nvarchar。set ansi_padding off 不適用於 nchar 或 nvarchar 資料型別。

在oracle中char,nchar,varchar,varchar2,nvarchar2這五種型別的區別

1.char(size)和varchar(size)的區別

char為定長的字段,最大長度為2k位元組;

varchar為可變長的字段,最大長度為4k位元組;

2.char(size)和nchar(size)的區別

char如果存放字母數字佔1個位元組,存放gbk編碼的漢字存放2個位元組,存放utf-8編碼的漢字占用3個位元組;

nchar根據所選字符集來定義存放字元的占用位元組數,一般都為2個位元組存放乙個字元(不管字元或者漢字)

3.varchar(size)和varchar2(size)的區別

在現在的版本中,兩者是沒有區別的;最大長度為4k位元組;推薦使用varchar2;

4.varchar2(size)和nvarchar2(size)的區別

最大長度為4k位元組,區別同char與nchar的區別;(如果資料庫字符集長度是2,則nvarchar2最大為2k)

5.共同特性

當執行insert的時候,插入的值為'',則轉變成null,即insert ... values('') <=> insert ... values(null)

搜尋的條件須用where xx is null

6.例子

比如有乙個性別字段,裡面存放「男,女」的其中乙個值,兩種常用選擇

char(2) 和 nchar(1)

Oracle的幾種字元型別的區別與使用

區別 1 char的長度是固定的,而varchar2的長度是可以變化的,比如,儲存字串 abc 對於char 20 表示你儲存的字元將佔20個位元組 包括17個空字元 而同樣的varchar2 20 則只占用3個位元組的長度,20只是最大值,當你儲存的字元小於20時,按實際長度儲存。2 char的效...

oracle字元型別對比認識

author skatetime 2011 02 21oracle字元型別對比認識 在 oracle9i 以上版本裡,我們再為字串選擇資料型別時,主要就是三種 char size varchar2 size nvarchar2 size varchar2 size 可變長度的字串,其最大長度為 si...

Oracle的索引型別總結

1 b tree索引 oracle資料庫中最常見的索引型別是b tree索引,也就是b 樹索引,以其同名的計算科學結構命名。每當你發布基本的沒有經過進 一步修改的create index語句時,就是在建立b tree索引。這裡不打算對b tree索引進行更多深入的 這些使用者都可以自己了解。基本上這...