Varchar往往用來保存可變長(zhǎng)度的字符串凳干。簡(jiǎn)單的說挠蛉,我們只是給其固定了一個(gè)最大值怕轿,然后系統(tǒng)會(huì)根據(jù)實(shí)際存儲(chǔ)的數(shù)據(jù)量來分配合適的存儲(chǔ)空間。為此相比CHAR字符數(shù)據(jù)而言败徊,其能夠比固定長(zhǎng)度類型占用更少的存儲(chǔ)空間帚呼。
通常情況下,VARCHAR數(shù)據(jù)類型能夠節(jié)約磁盤空間皱蹦,為此往往認(rèn)為其能夠提升數(shù)據(jù)庫(kù)的性能煤杀。不過這里需要注意的是,這往往是一把雙刃劍沪哺。其在提升性能的同時(shí)沈自,往往也會(huì)產(chǎn)生一些副作用。如因?yàn)槠溟L(zhǎng)度是可變的辜妓,為此在數(shù)據(jù)進(jìn)行更新時(shí)可能會(huì)導(dǎo)致一些額外的工作枯途。如在更改前,其字符長(zhǎng)度是10位(Varchar規(guī)定的最長(zhǎng)字符數(shù)假設(shè)是50位)籍滴,此時(shí)系統(tǒng)就只給其分配10個(gè)存儲(chǔ)的位置(假設(shè)不考慮系統(tǒng)自身的開銷)酪夷。更改后,其數(shù)據(jù)量達(dá)到了20位异逐。由于沒有超過最大50位的限制捶索,為此數(shù)據(jù)庫(kù)還是允許其存儲(chǔ)的。只是其原先的存儲(chǔ)位置已經(jīng)無(wú)法滿足其存儲(chǔ)的需求灰瞻。此時(shí)系統(tǒng)就需要進(jìn)行額外的操作腥例。如根據(jù)存儲(chǔ)引擎不同,有的會(huì)采用拆分機(jī)制酝润,而有的則會(huì)采用分頁(yè)機(jī)制燎竖。
所以經(jīng)常改變的用char,不經(jīng)常改變的用varchar