您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關(guān)mysql中char與varchar的區(qū)別,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
varchar類型用于存儲可變長的字符串,是比較常見常用的字符串?dāng)?shù)據(jù)類型。
在存儲的字符串是變長時,varchar更加節(jié)約空間。由于varchar是變長的,在使用update的時候,可能使得行變得比原來更長,這就導(dǎo)致需要做額外的工作。
如果一個行占用的空間增加,并且在頁內(nèi)沒有多余的空間可與存儲,這是innoDB的存儲引擎需要分裂頁來使行可以放進頁內(nèi)。
char類型用于存儲定長的字符串。
在存儲數(shù)據(jù)時,MySQL會刪除所有文末的空格,所以,即便你存儲的是:'abc ',注意這個字符串末尾是有空格的,也會在存儲時把這個空格刪掉。
mysql中char和varchar數(shù)據(jù)類型的區(qū)別:
1.CHAR的長度是固定的,而VARCHAR2的長度是可以變化的, 比如,存儲字符串“abc",對于CHAR (10),表示你存儲的字符將占10個字節(jié)(包括7個空字符),而同樣的VARCHAR2 (10)則只占用3個字節(jié)的長度,10只是最大值,當(dāng)你存儲的字符小于10時,按實際長度存儲。
2.CHAR的效率比VARCHAR2的效率稍高。
3.目前VARCHAR是VARCHAR2的同義詞。工業(yè)標(biāo)準的VARCHAR類型可以存儲空字符串,但是oracle不這樣做,盡管它保留以后這樣做的權(quán)利。Oracle自己開發(fā)了一個數(shù)據(jù)類型VARCHAR2,這個類型不是一個標(biāo)準的VARCHAR,它將在數(shù)據(jù)庫中varchar列可以存儲空字符串的特性改為存儲NULL值。如果你想有向后兼容的能力,Oracle建議使用VARCHAR2而不是VARCHAR。
何時該用CHAR,何時該用varchar2?
CHAR與VARCHAR2是一對矛盾的統(tǒng)一體,兩者是互補的關(guān)系.
VARCHAR2比CHAR節(jié)省空間,在效率上比CHAR會稍微差一些,即要想獲得效率,就必須犧牲一定的空間,這也就是我們在數(shù)據(jù)庫設(shè)計上常說的‘以空間換效率’。
VARCHAR2雖然比CHAR節(jié)省空間,但是如果一個VARCHAR2列經(jīng)常被修改,而且每次被修改的數(shù)據(jù)的長度不同,這會引起‘行遷移’(Row Migration)現(xiàn)象,而這造成多余的I/O,是數(shù)據(jù)庫設(shè)計和調(diào)整中要盡力避免的,在這種情況下用CHAR代替VARCHAR2會更好一些。
使用場景:
varchar適用的場景:
字符串列的最大長度比平均長度要大很多;
字符串列的更新很少時,因為沒有或很少有內(nèi)存碎片問題;
使用了UTF-8這樣復(fù)雜的字符集,每個字符都使用不同的字節(jié)數(shù)進行存儲;
char適用的場景:
列的長度為定值時適合適用,比如:MD5密文數(shù)據(jù)。
關(guān)于mysql中char與varchar的區(qū)別就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。