基本区别
char 是固定长度的,varchar 是可变长度的
char 如果某个长度小于M,MySQL就会在它的右边用空格补足,使长度达到M
varchar 每个值只占用刚好够用的字节,再加上一个用来记录其长度的字节,当长度小于255时,长度记录位占一个字节,大于时,占用两个字节
最大长度是多少?
char 的最大长度是 255 个字符(注意 不是字节)
varchar 的最大长度是 65535 个字节(注意 不是字符)
定义字段时,char(n) 或 varchar(n) 中的 n 是指字符数
当使用utf8编码时,一个字符占3个字节
因为char是定义字符数,所以可以定义 char(255),而不能定义 varchar(65535),因为varchar的最大长度是65535个字节,那么最大长度不能超过21845个字符,mysql utf8编码下 varchar的最大长度实测为21589
适用场景
char 不需计算,占空间
varchar 需计算,省空间
char 适应于长度短、长度相对固定的字段,例如邮编、UUID,还有频繁改变内容的列,因为省去了char不需要频繁计算内容长度