- varchar类型用于存储可变长字符串,比定长类型更节省空间,因为它仅适用必要的空间(例如,越短的字符串使用越少的空间)。
- varchar节省了存储空间,所以对性能也有帮助。但是,由于行是变长的,在update时可能使行变得比原来更长,这就是导致需要额外的工作。如果一个行占用的空间增长,并且在页内没有更多的空间可以存储,在这种情况下,不同的存储引擎的处理方式是不一样的。例如,myisam会将行拆成不同的片段存储,innodb则需要分裂页来使行可以放进页内。
存储和检索时保留末尾空格。
适用场景:
字符串列的最大长度比平均长度大很多
列的更新很少,所以碎片不是问题
使用了像utf-8这样复杂的字符集,每个字符都使用不同的字节数进行存储。
- char类型是定长,mysql根据定义的字符串长度分配足够的空间。
- char适合存储很短的字符串,或者所有值都接近同一个长度。例如,char非常适合存储密码的md5值,因为这是一个定长的值。对于经常变更的数据,char也比varchar更好,因为定长的char类型不容易产生碎片。对于非常短的列,char比charchar在存储空间上也更有效率,因为varchar需要一个额外的字节来记录长度。
检索时删除末尾空格。