VARCHAR与CHAR的区别

VARCHAR

     varchar类型用于存储可变长字符串,是最常见的字符串数据类型.它比定长类型更节省空间,因为它仅使用必要的空间(例如,越短的字符串使用越少的空间).

有一种情况例外,如果MySQL表使用ROW_FORMAT=FIXED创建的话,每一行都会使用定长存储,这会很浪费空间

     varchar需要使用1或2个额外字节记录字符串的长度: 如果列的最大长度小于等于255字节,则只使用1个字节表示,否则使用2个字节. 假设采用latin1字符集,一个varchar(10)的列需要11个字节的存储空间.varchar(1000)的列则需要1002个字节,因为需要2个字节存储长度信息

     varchar节省了存储空间,所以对性能也有帮助.但是,由于行是变长的,在update时可能使行变得比原来更长,这就导致需要做额外的工作.如果一个行占用的空间增长,并且在页内没有更多的空间可以存储,在这种情况下,不同的存储引擎的处理方式是不一样的.例如,MyISAM会将行拆成不同的片段存储,InnoDB则需要分裂页来使行可以放进页内.其他一些存储引擎也许从不在原数据位置更新数据

     下面这些情况下使用varchar是合适的: 字符串列的最大长度比平均长度大很多,列的更新很少,所以碎片不是问题; 使用了像utf-8这样复杂的字符集,每个字符都使用不同的字节数进行存储.

CHAR

      char类型是定长的: MySQL总是根据定义的字符串长度分配足够的空间.当存储char值时,MySQL会删除所有的末尾空格.char值会根据需要采用空格进行填充以方便比较.
char适合存储很短的字符串,或者所有值都接近同一个长度. 例如,char非常适合存储密码的MD5值,因为这是一个定长的值.对于经常变更的数据,char也比varchar更好,因为定长的char类型不容易产生碎片. 对于非常短的列,char比varchar在存储空间上也更有效率. 例如用char(1)来存储只有Y和N的值,如果采用单字节字符集只需要一个字节,但是varchar(1)却需要两个字节,因为还有一个记录长度的额外字节

       

你可能感兴趣的:(MySQL)