1.varchar
varchar用于存儲(chǔ)可變長字符串毁涉,是最常見的數(shù)據(jù)類型。它比定長類型更省空間径密。有一沖情況例外回梧,如果MySQL表使用ROW_FORMAT=FIXED創(chuàng)建的話,每一行都會(huì)使用定長存儲(chǔ)闷串,這會(huì)很浪費(fèi)空間瓮钥。
varchar會(huì)使用1或2個(gè)額外字節(jié)記錄字符串的長度:如果列的最大長度<=255字節(jié),則只使用1個(gè)字節(jié)表示,否則使用2個(gè)字節(jié)碉熄。
varchar節(jié)省了存儲(chǔ)空間桨武,所以對(duì)性能也有幫助。但是由于行是變長的锈津,在update時(shí)可能使行變得比原來更長玻募,這就導(dǎo)致需要做額外的工作。
如果一個(gè)行占用的空間增長一姿,并且在頁內(nèi)沒有更多的空間可以存儲(chǔ)七咧,在這種情況下,不同的引擎處理方式是不一樣的叮叹。例如MyISAM會(huì)將行拆成不同的片段存儲(chǔ)艾栋,InnoDB則需要分裂頁來使行可以放進(jìn)頁內(nèi)。其他引擎還會(huì)有不同處理方式蛉顽。
2.char
char類型是定長的:MySQL總是根據(jù)定義的字符串長度分配足夠的空間蝗砾。
char適合存儲(chǔ)很短的字符串,或者所有值都接近一個(gè)長度携冤,比如密碼的MD5值悼粮。對(duì)于經(jīng)常變更的數(shù)據(jù),char也比varchar更好曾棕,因?yàn)槎ㄩL的char類型不容易產(chǎn)生碎片扣猫。對(duì)于非常短的列,char比varchar在存儲(chǔ)空間上也更有效率翘地。
char會(huì)刪除字符串末尾的空格(取決于存儲(chǔ)引擎)申尤。