VARCHAR、CHAR的选择

  char 固定长度,非 Unicode 字符数据,长度为 n 个字节。n 的取值范围为 1 至 255,存储大小是 n 个字节。

  varchar 可变长度,非 Unicode 字符数据。n 的取值范围为 1 至 8,000。max 指示最大存储大小是 2^31-1 个字节。存储大小是输入数据的实际长度加 2 个字节。所输入数据的长度可以为 0 个字符。SQL-2003 中的 varchar 就是 char varying 或 character varying。

  表中只要存在一个varchar类型的字段,那么所有的char字段都会自动变成varchar类型;  
  但是,长度在4以内的char类型不会转换成varchar,反而是长度在4以内的varchar类型会被转换成char类型。  
  也就是说,MySQL设计的时候,也已经考虑了速度和空间的问题,并且也建议不要让这两种定长和变长的类型同处一个表。这个是MySQL的特色。

  1.如果列数据项的大小一致,则使用 char。
  2.如果列数据项的大小差异相当大,则使用 varchar。
  3.如果列数据项大小相差很大,而且大小可能超过 8,000 字节,请使用 varchar(max)。
  4.当执行 CREATE TABLE 或 ALTER TABLE 时,如果 SET ANSI_PADDING 为 OFF,则定义为 NULL 的 char 列将作为 varchar 处理。
  5.对于MyISAM表,尽量使用Char,对于那些经常需要修改而容易形成碎片的myisam和isam数据表就更是如此,它的缺点就是占用磁盘空间。
  6.对于InnoDB表,因为它的数据行内部存储格式对固定长度的数据行和可变长度的数据行不加区分(所有数据行共用一个表头部分,这个标头部分存放着指向各有关数据列的指针),所以使用char类型不见得会比使用varchar类型好。事实上,因为char类型通常要比varchar类型占用更多的空间,所以从减少空间占用量和减少磁盘i/o的角度,使用varchar类型反而更有利。

原文地址:https://www.cnblogs.com/17too/p/2078552.html