char和varchar都是用來存儲字符串的,但是他們保持和檢索的方式不同。
char是屬於固定長度的字符類型,而varchar是屬於可變長度的字符類型。
由於char是固定長度的所以它的處理速度比varchar快很多。但是缺點是浪費存儲空間,讀取char類型數據時候時如果尾部有空格會丟失空格,所以對於那種長度變化不大的並且對查詢速度有較高要求的數據可以考慮使用char類型來存儲。
另外隨着MySQL版本的不斷升級,varchar數據類型的性能也在不斷改進並提高,所以在許多的應用中,varchar類型被更多的使用
不同的存儲引擎對char和varchar的使用原則有所不同:
- MyISAM存儲引擎:建議使用固定長度的數據列代替可變長度的數據列。
- MEMORY存儲引擎:目前都使用固定長度的數據行存儲,因此無論使用CHAR或VARCHAR列都沒有關系。兩者都是作為CHAR類型處理。
- InnoDB存儲引擎:建議使用VARCHAR類型。對於InnoDB數據表,內部的行存儲格式沒有區分固定長度和可變長度列(所有數據行都使用指向數據列值的頭指針),因此在本質上,使用固定長度的CHAR列不一定比使用可變長度VARCHAR列性能要好。因而,主要的性能因素是數據行使用的存儲總量。由於CHAR平均占用的空間多於VARCHAR,因此使用VARCHAR來最小化需要處理的數據行的存儲總量和磁盤I/O是比較好的。