更新時(shí)間:2021-02-13 09:00:00 來源:動(dòng)力節(jié)點(diǎn) 瀏覽1931次
在MYSQL中,char是指:使用指定長度的固定長度表示字符串的一種字段類型;比如char(8),則數(shù)據(jù)庫會(huì)使用固定的1個(gè)字節(jié)(八位)來存儲(chǔ)數(shù)據(jù),不足8位的字符串在其后補(bǔ)空字符。varchar(M)是一種比char更加靈活的數(shù)據(jù)類型,同樣用于表示字符數(shù)據(jù),但是varchar可以保存可變長度的字符串。本文我們就來介紹MySQL中char和varchar。
char:定長,效率高,一般用于固定長度的表單提交數(shù)據(jù)存儲(chǔ);例如:身份證號(hào),手機(jī)號(hào),電話,密碼等。
varchar:不定長,效率偏低。
1、CHAR(M), VARCHAR(M)不同之處
CHAR(M)定義的列的長度為固定的,M取值可以為0~255之間,當(dāng)保存CHAR值時(shí),在它們的右邊填充空格以達(dá)到指定的長度。當(dāng)檢 索到CHAR值時(shí),尾部的空格被刪除掉。在存儲(chǔ)或檢索過程中不進(jìn)行大小寫轉(zhuǎn)換。CHAR存儲(chǔ)定長數(shù)據(jù)很方便,CHAR字段上的索引效率級(jí)高,比如定義 char(10),那么不論你存儲(chǔ)的數(shù)據(jù)是否達(dá)到了10個(gè)字節(jié),都要占去10個(gè)字節(jié)的空間,不足的自動(dòng)用空格填充。
VARCHAR(M)定義的列的長度為可變長字符串,M取值可以為0~65535之間,(VARCHAR的最大有效長度由最大行大小和使用 的字符集確定。整體最大長度是65,532字節(jié))。VARCHAR值保存時(shí)只保存需要的字符數(shù),另加一個(gè)字節(jié)來記錄長度(如果列聲明的長度超過255,則 使用兩個(gè)字節(jié))。VARCHAR值保存時(shí)不進(jìn)行填充。當(dāng)值保存和檢索時(shí)尾部的空格仍保留,符合標(biāo)準(zhǔn)SQL。varchar存儲(chǔ)變長數(shù)據(jù),但存儲(chǔ)效率沒有 CHAR高。如果一個(gè)字段可能的值是不固定長度的,我們只知道它不可能超過10個(gè)字符,把它定義為 VARCHAR(10)是最合算的。VARCHAR類型的實(shí)際長度是它的值的實(shí)際長度+1。為什么”+1″呢?這一個(gè)字節(jié)用于保存實(shí)際使用了多大的長度。 從空間上考慮,用varchar合適;從效率上考慮,用char合適,關(guān)鍵是根據(jù)實(shí)際情況找到權(quán)衡點(diǎn)。
CHAR和VARCHAR最大的不同就是一個(gè)是固定長度,一個(gè)是可變長度。由于是可變長度,因此實(shí)際存儲(chǔ)的時(shí)候是實(shí)際字符串再加上一個(gè)記錄 字符串長度的字節(jié)(如果超過255則需要兩個(gè)字節(jié))。如果分配給CHAR或VARCHAR列的值超過列的最大長度,則對(duì)值進(jìn)行裁剪以使其適合。如果被裁掉 的字符不是空格,則會(huì)產(chǎn)生一條警告。如果裁剪非空格字符,則會(huì)造成錯(cuò)誤(而不是警告)并通過使用嚴(yán)格SQL模式禁用值的插入。
2、VARCHAR和TEXT、BlOB類型的區(qū)別
VARCHAR,BLOB和TEXT類型是變長類型,對(duì)于其存儲(chǔ)需求取決于列值的實(shí)際長度(在前面的表格中用L表示),而不是取決于類型 的最大可能尺寸。例如,一個(gè)VARCHAR(10)列能保存最大長度為10個(gè)字符的一個(gè)字符串,實(shí)際的存儲(chǔ)需要是字符串的長度 ,加上1個(gè)字節(jié)以記錄字符串的長度。對(duì)于字符串‘abcd’,L是4而存儲(chǔ)要求是5個(gè)字節(jié)。
BLOB和TEXT類型需要1,2,3或4個(gè)字節(jié)來記錄列值的長度,這取決于類型的最大可能長度。VARCHAR需要定義大小,有65535字節(jié)的最大限制;TEXT則不需要。如果你把一個(gè)超過列類型最大長度的值賦給一個(gè)BLOB或TEXT列,值被截?cái)嘁赃m合它。
一個(gè)BLOB是一個(gè)能保存可變數(shù)量的數(shù)據(jù)的二進(jìn)制的大對(duì)象。4個(gè)BLOB類型TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB僅僅在他們能保存值的最大長度方面有所不同。
BLOB 可以儲(chǔ)存圖片,TEXT不行,TEXT只能儲(chǔ)存純文本文件。4個(gè)TEXT類型TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT對(duì)應(yīng)于 4個(gè)BLOB類型,并且有同樣的最大長度和存儲(chǔ)需求。在BLOB和TEXT類型之間的唯一差別是對(duì)BLOB值的排序和比較以大小寫敏感方式執(zhí)行,而對(duì) TEXT值是大小寫不敏感的。換句話說,一個(gè)TEXT是一個(gè)大小寫不敏感的BLOB。
3、char,varchar和text的區(qū)別
長度的區(qū)別,char范圍是0~255,varchar最長是64k,但是注意這里的64k是整個(gè)row的長度,要考慮到其它的 column,還有如果存在not null的時(shí)候也會(huì)占用一位,對(duì)不同的字符集,有效長度還不一樣,比如utf8的,最多21845,還要除去別的column,但是varchar在一般 情況下存儲(chǔ)都?jí)蛴昧恕H绻龅搅舜笪谋荆紤]使用text,最大能到4G。
效率來說基本是char>varchar>text,但是如果使用的是Innodb引擎的話,推薦使用varchar代替char。
char和varchar可以有默認(rèn)值,text不能指定默認(rèn)值。
數(shù)據(jù)庫選擇合適的數(shù)據(jù)類型存儲(chǔ)還是很有必要的,對(duì)性能有一定影響。對(duì)于int類型的,如果不需要存取負(fù)值,最好加上unsigned;對(duì)于經(jīng)常出現(xiàn)在where語句中的字段,考慮加索引,整形的尤其適合加索引。
以上就是對(duì)MySQL中的char和varchar的簡單介紹,關(guān)于char和varchar的更加復(fù)雜的用法和性質(zhì)可以在本站的MySQL教程中找到答案,我們可以由淺入深,深入學(xué)習(xí)MySQL中char和varchar的用法。
相關(guān)閱讀
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
有基礎(chǔ) 直達(dá)就業(yè)
業(yè)余時(shí)間 高薪轉(zhuǎn)行
工作1~3年,加薪神器
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問老師會(huì)電話與您溝通安排學(xué)習(xí)
初級(jí) 202925
初級(jí) 203221
初級(jí) 202629
初級(jí) 203743