mysql中char和varchar

在MySQL中,char和varchar是两种非常常见且非常重要的字符串类型,MySQL不同存储引擎对其在磁盘和内存的处理方式不一样。

varchar

varchar类型是属于可变长类型,相对来说比char类型更节省空间,因为varchar只使用必要的空间(Row_FORMAT=FIXED是个特殊情况)。但是varchar需要额外的字节记录字符长度。如果列的最大长度小于或等于255个字节,需要一个字节来记录长度,超过255个字节需要额外2个字节。

以下情况适合使用varchar

字符串列的最大长度比平均长度达很多

列更新很少(碎片很少)


char

char是定长类型,MySQL总是根据定义字符串长度分配足够的空间。

以下情况适合使用char

char值适合存储很短的字符串,或者接近值长度的字符串。

对于经常变更的数据,char比varchar好,因为char类型不容易产生碎片。

对于非常短的列,char比varchar在存储空间上也更有效率。


内存上的比较

MySQL通常会分配固定大小的内存来保存内部值。


总结

varchar(1)和varchar(100)存储’y’在存储空间是一样的。但是varchar(100)会占用更大的内存,在这种情况下,如果数据量非常大,varchar(1)性能会比varchar(100)好很多。如果这时候对临时表进行排序时会更加明显,如果是机械磁盘的话,需要响应的时间会更久。

以上比较是基于innodb

推荐文章