溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

mysql中的char與varchar有什么區(qū)別

發(fā)布時間:2020-06-24 19:33:40 來源:億速云 閱讀:298 作者:元一 欄目:MySQL數(shù)據(jù)庫

這篇文章將為大家詳細講解有關(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é)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節(jié)

免責(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)容。

AI