char

定长  最多255字符  末尾的空格会被默认删除

何时选用char类型储存?

1 数据长度近似 如手机号 身份证 MD5加密后的值

2 短字符串 相对varchar可以节约一个储存长度的空间

3 频繁更新的字段  相对于varchar不会产生长度变化也就不会产生存储碎片

 

varchar

varchar类型与char类型不同 为变长字符串

在字符长度不超过255时 使用一个字节存储长度

超过255时用两个字节存储长度

每行的varchar总和不得超过65535字节 如果想存储更长的字符串建议选用text格式

既然varchar是变长的 而且不超过255字符时都是用一个字节来存储长度 那么是不是意味着varchar(4) 与varchar(100) 在存储四个字符长度的内容 比如 "abcd"时是完全一样的呢?

  mysql在查询时对于varchar字段在内存中是采用固定宽度而不是储存时的变长宽度 尤其是查询时创建的隐形临时表 所以在选择字段属性时还是适可而止 根据自己的业务来选择最合适的并且最小的长度 从而来提高查询速度 减少数据库服务器的开销

 

何时选用varchar列来储存?

1 字符串列最大长度比平均长度大很多的列  充分发挥变长的特点

2 字符串列较少被更新的列  因为innodb引擎一个存储页为16k 频繁的更新变长字段可能导致存储页的分裂 产生存储碎片 

3 多字节字符集 如utf-8