Varchar往往用來保存可變長度的字符串。簡單的說,我們只是給其固定了一個最大值,然后系統(tǒng)會根據(jù)實際存儲的數(shù)據(jù)量來分配合適的存儲空間。為此相比CHAR字符數(shù)據(jù)而言,其能夠比固定長度類型占用更少的存儲空間。
通常情況下,VARCHAR數(shù)據(jù)類型能夠節(jié)約磁盤空間,為此往往認為其能夠提升數(shù)據(jù)庫的性能。不過這里需要注意的是,這往往是一把雙刃劍。其在提升性能的同時,往往也會產(chǎn)生一些副作用。如因為其長度是可變的,為此在數(shù)據(jù)進行更新時可能會導(dǎo)致一些額外的工作。如在更改前,其字符長度是10位(Varchar規(guī)定的最長字符數(shù)假設(shè)是50位),此時系統(tǒng)就只給其分配10個存儲的位置(假設(shè)不考慮系統(tǒng)自身的開銷)。更改后,其數(shù)據(jù)量達到了20位。由于沒有超過最大50位的限制,為此數(shù)據(jù)庫還是允許其存儲的。只是其原先的存儲位置已經(jīng)無法滿足其存儲的需求。此時系統(tǒng)就需要進行額外的操作。如根據(jù)存儲引擎不同,有的會采用拆分機制,而有的則會采用分頁機制。
所以經(jīng)常改變的用char,不經(jīng)常改變的用varchar