Oracle CHAR,VARCHAR,VARCHAR2,nvarchar型別的區別與使用
一 varchar,nvarchar,
四個型別都屬於變長字元型別, 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 處理。
另外幫助理解的,只供參考:轉自http://www.51testing.com/?uid-258885-action-viewspace-itemid-141197
也可參照學習http://ce.sysu.edu.cn/garden/dispbbs.asp?boardid=26&ID=8774&replyID=18180&skin=1
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)
四個型別都屬於變長字元型別, 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 處理。
另外幫助理解的,只供參考:轉自http://www.51testing.com/?uid-258885-action-viewspace-itemid-141197
也可參照學習http://ce.sysu.edu.cn/garden/dispbbs.asp?boardid=26&ID=8774&replyID=18180&skin=1
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)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25897606/viewspace-705148/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【基礎】Oracle CHAR,VARCHAR,VARCHAR2,nvarchar型別的區別與使用Oracle型別
- Oracle 資料型別CHAR, NCHAR, VARCHAR2, NVARCHAR2Oracle資料型別
- oracle中char與varchar2的區別Oracle
- Oracle中NVARCHAR2與VARCHAR2的區別Oracle
- varchar2 與 nvarchar2 區別
- VARCHAR2(N CHAR)與VARCHAR2(N)的區別[Oracle基礎]Oracle
- char ,varchar2和varchar的區別
- Oracle的資料型別:char/varchar2Oracle資料型別
- Sql server char,nchar,varchar與Nvarchar的區別SQLServer
- char和varchar2的區別
- Oracle 中varchar2 和nvarchar2區別Oracle
- char nchar varchar2 nvarchar2 區別-Oracle (varchar2 max 4K, 2K漢字)Oracle
- 【區別】Oracle官方文件中有關NVARCHAR2、VARCHAR2和VARCHAR資料型別的描述Oracle資料型別
- char,nchar,varchar,nvarchar的區別和特點
- char(n)和varchar2(n)區別
- MySQL中資料型別(char(n)、varchar(n)、nchar(n)、nvarchar(n)的區別)MySql資料型別
- MySQL字元資料型別char與varchar的區別MySql字元資料型別
- NTMySQL中varchar和char型別的區別heeMySql型別
- varchar和char的區別
- 聯機重定義修改欄位型別(NVARCHAR2->VARCHAR2)型別
- MySQL資料型別操作(char與varchar)MySql資料型別
- 12c 新特性之varchar2,nvarchar2型別大小測試型別
- MySQL中CHAR和VARCHAR區別MySql
- 談MySQL中char varchar區別MySql
- oracle如何變更varchar2型別的列為clobOracle型別
- long型別轉換成varchar2型別
- PLSQL Language Reference-PL/SQL資料型別-SQL資料型別-CHAR和VARCHAR2變數SQL資料型別變數
- 資料庫中varchar和Nvarchar區別與聯絡資料庫
- 避免使用Oracle的char型別Oracle型別
- MySQL 中 VARCHAR 最大長度及 CHAR 和 VARCHAR 的區別MySql
- SQL插入語句中有單引號 && SQL中char nchar varchar nvarchar的區別 && Java中字元(串)和數值型別的轉換SQLJava字元型別
- Mysql中varchar與char的區別以及varchar(30)中的30代表的涵義MySql
- MySQL CHAR和VARCHAR資料型別介紹MySql資料型別
- mysql的varchar(N)和int(N)的含義及其與char區別MySql
- 關於mysql設定varchar 欄位的預設值''和null的區別,以及varchar和char的區別MySqlNull
- long查詢結果轉換為varchar2型別型別
- 如何將varchar2修改為clob型別欄位(使用long過渡)型別
- 【基礎】ORACLE CHAR 與 VARCHAROracle