mysql中char和varchar区别
char是一种固定长度的类型,无论储存的数据有多少都会固定长度,如果插入的长度小于定义长度,则可以用空格进行填充。而varchar是一种可变长度的类型,当插入的长度小于定义长度时,插入多长就存多长。
使用层面
varchar就是存进去是什么,取出来就是什么。
char的话存进去的字符串尾部空格会丢失。
存储空间
一般来说,varchar比char更节省空间。
- varchar类型用于存储可变长度字符串,实际存储的空间=字符串内容+字符串长度(需要使用1或2个额外字节记录字符串的长度)
- char的话是固定长度,一旦你定义了字段类型char(10),哪怕你只是存了3个字符,那么也是用了10个字符长度的存储空间(其中7个为空字符/无效字符)
存储结构
char根据定义的字符串长度分配了足够的空间。
varchar在更新长度时(比原来长度更长),有可能导致分裂页。导致出现碎片问题。
根据存储结构的特性,也导致了更新数据时,char的性能比varchar要更好。
char查找效率会很高,varchar查找效率会更低。
总结
适合varchar的场景:
- 字符串的最大长度比平均长度大很多
- 列的更新很少,所以碎片不是问题
适合char的场景:
- 存储很短的字符串或者所有值都接近同一个长度,例如md5、ip等信息
- 经常变更的数据,不容易产生碎片