varchar与char的一个主要区别是存储方式的不同
varchar 是变长存储
占用的存储空间 = 存储内容实际大小 + 长度记录位
char 是定长存储
占用的存储空间 = 字段声明的宽度
存储方式对性能是有影响的
例如
分别使用 varchar(10) 与 varchar(255) 定义一个字段,实际存储的字符串为 “abcde”
在存储空间方面,他们没有区别,因为 varchar 是变长存储,只占用实际内容的宽度
但在查询时,他们就有区别了,会占用不同的内存空间
因为执行查询时,mysql为了优化查询,在内存中对字符串会使用固定的宽度,所以定义的宽度越长,就会消耗更多的内存
存储方式对I/O性能也有影响,如果使用 varchar 定义了字段,此字段内容还是更新频繁的,例如开始是个长字符串,后来更新为一个短字符串,因为 varchar 占用空间就是字符串实际宽度,那么这时就产生了碎片空间
而 char 类型是定长存储,就不会产生存储碎片,有更好的I/O性能
不少开发人员对 varchar 与 char 的使用上存在误区,喜欢用 varchar,不喜欢用 char,使用 varchar 时也喜欢直接定义一个很大的宽度,担心实际使用时宽度不够,通过了解他们各自的特点,有助于更好的选择合适的类型
点击下方“阅读原文”查看 文章列表