char 與 varchar都是數(shù)據(jù)庫存儲字符串的存儲類型
區(qū)別:
- char是固定長度存儲方式,實(shí)際存儲長度沒達(dá)到設(shè)定長度時會填充空格。最大存儲長度只有255
- varchar是變長存儲,只制定最大存儲長度,實(shí)際長度按照實(shí)際字符長度來。最大存儲長度為65535(5.0.3以前為255)
- varchar數(shù)據(jù)更新時,如果新存儲的數(shù)據(jù)長度變大,會采用分頁或者拆分的方式。實(shí)際對性能也沒有影響,innodb采用頁管理數(shù)據(jù),數(shù)據(jù)移動是現(xiàn)在內(nèi)存完成再寫到磁盤,因此數(shù)據(jù)移動很快
mysql innodb數(shù)據(jù)庫性能實(shí)踐 - 查找char數(shù)據(jù)也沒有比varchar數(shù)據(jù)速度更快,上面的實(shí)驗(yàn)也驗(yàn)證了兩者性能沒有差別,
char vs varchar
FALSE: a char is just a varchar2 blank padded - we do not store strings "at a specified position from each other". We do search for the end of the string - we use a leading byte length to figure things out.
使用總結(jié)
一般優(yōu)先使用varchar,不耗費(fèi)存儲空間,一些特殊情況下可以使用char
當(dāng)字符串長度固定時。使用char。例如存儲MD5哈希值,或者uuid,使用char
當(dāng)字符串長度較小。例如只有10個以內(nèi)的字符