新聞中心
varchar和char有什么區(qū)別?

varchar和char都是用來存儲(chǔ)字符串類型的數(shù)據(jù)的數(shù)據(jù)類型。它們的主要區(qū)別在于存儲(chǔ)方式和存儲(chǔ)空間。
1. 存儲(chǔ)方式
char類型的數(shù)據(jù)是固定長度的,它會(huì)在存儲(chǔ)時(shí)占用固定的存儲(chǔ)空間,無論實(shí)際存儲(chǔ)的數(shù)據(jù)長度是否達(dá)到了該長度。例如,如果一個(gè)char(10)類型的字段存儲(chǔ)了一個(gè)長度為5的字符串,那么它仍然會(huì)占用10個(gè)字節(jié)的存儲(chǔ)空間,其中剩余的5個(gè)字節(jié)會(huì)被填充為默認(rèn)值。
而varchar類型的數(shù)據(jù)是可變長度的,它會(huì)根據(jù)實(shí)際存儲(chǔ)的數(shù)據(jù)長度動(dòng)態(tài)地分配存儲(chǔ)空間。例如,如果一個(gè)varchar(10)類型的字段存儲(chǔ)了一個(gè)長度為5的字符串,那么它只會(huì)占用5個(gè)字節(jié)的存儲(chǔ)空間。
2. 存儲(chǔ)空間oracle char和varchar的區(qū)別?
二者都是字段的字符數(shù)據(jù)類型,這點(diǎn)是相同的,主要不同在于二者的存儲(chǔ)辦法,以及查詢。
char是固定長度的,而varchar是不固定長度的。
比如:某字段的格式為char(8)。那么這個(gè)字段的長度就是8,就算你僅僅存了一個(gè)字符a,它占用的空間也是8個(gè)長度的字符占用的空間的大小,也就是說char比較浪費(fèi)存儲(chǔ)空間。
相對(duì)而言,varchar就是一個(gè)可以變的字符類型,比如varchar2(8)表示最長可以存8位的字符,但是如果你僅僅存了一個(gè)a,那么這個(gè)a占用的存儲(chǔ)僅僅為它本身占用的一個(gè)字符長度。
也就是說從存儲(chǔ)來說:varchar2比char節(jié)省一些空間。
從查詢來說:這個(gè)沒有實(shí)際的例子證明,但是大部分人認(rèn)為char字段的查詢比varchar要快一些,但是我估計(jì)除非數(shù)據(jù)量特別大,不然這點(diǎn)看不太出來的。char和varchar2的區(qū)別?
1、長度上的區(qū)別
CHAR的長度是固定的,VARCHAR2的長度是可以變化的。
例如,存儲(chǔ)字符串“abc",對(duì)于CHAR (20),表示存儲(chǔ)的字符占20個(gè)字節(jié),而同樣的VARCHAR2 (20)就只占3個(gè)字節(jié)的長度,20只是最大值,而且當(dāng)存儲(chǔ)的字符小于20時(shí),按實(shí)際的長度來存儲(chǔ)。
2、意義上的區(qū)別
VARCHAR是VARCHAR2的同義詞,工業(yè)標(biāo)準(zhǔn)的VARCHAR類型可以用來存儲(chǔ)空字符串,但是Oracle自己開發(fā)了一個(gè)數(shù)據(jù)類型VARCHAR2,這個(gè)類型不是一個(gè)標(biāo)準(zhǔn)的VARCHAR,它在數(shù)據(jù)庫中varchar列可以存儲(chǔ)空字符串的特性改為存儲(chǔ)NULL值。
3、空間大小上的區(qū)別
VARCHAR2比CHAR要節(jié)省空間,VARCHAR2在效率上也比CHAR差一些,所以如果想獲得效率,就必須犧牲一定的空間,這就是在數(shù)據(jù)庫設(shè)計(jì)上常說的‘以空間換效率’。
VARCHAR2雖然比CHAR節(jié)省空間,但如果一個(gè)VARCHAR2列經(jīng)常被修改,且每次被修改數(shù)據(jù)的長度不同會(huì)引起‘行遷移’現(xiàn)象。
本文題目:varchar和char有什么區(qū)別
URL分享:http://m.5511xx.com/article/dpiogeg.html


咨詢
建站咨詢
