MySQL中char与varchar 的区别

时间:2022-03-14 04:39:44
  1. 长度区别
    char(0-255或1-255)
    4.1以下的版本 varchar(0-255或1-255)
    5.0以上的版本 varchar(0-65535)
  2. 实际存储长度(L)
    char(M) L = M
    varchar(M) L = M+1(记录存储长度)
  3. 版本存储长度区别(L)
    4.0版本以下,varchar(20) L = 20/3 = 6(UTF8) 或 L = 20/2 = 10(GBK)
    5.0版本以上,varchar(20),L = 20;
  4. 空格处理(保存和检索)
    当保存CHAR值时,在它们的右边填充空格以达到指定的长度。当检索到CHAR值时,尾部的空格被删除掉。
    VARCHAR值保存时不进行填充。当值保存和检索时尾部的空格仍保留,符合标准SQL
  5. 选择考虑
    从减少空间占用量和减少磁盘i/o的角度,使用varchar类型
    存储很短的信息,用char
    固定长度,用char
    十分频繁改变的column 用char

  6. 超过最大长度错误
    分配给CHAR或VARCHAR列的值超过列的最大长度,裁剪掉的是空格,产生一条警告
    分配给CHAR或VARCHAR列的值超过列的最大长度,裁剪掉的是非空格,造成错误(而不是警告)并通过使用严格SQL模式禁用值的插入

  7. MyIsAM 和 Innodb 的区别。
    对于MyISAM表,尽量使用Char,对于那些经常需要修改而容易形成碎片的myisam和isam数据表就更是如此,它的缺点就是占用磁盘空间
    对于InnoDB表,因为它的数据行内部存储格式对固定长度的数据行和可变长度的数据行不加区分(所有数据行共用一个表头部分,这个标头部分存放着指向各有关数据列的指针),所以使用char类型不见得会比使用varchar类型好。

  8. 对据列类型转换的规则
    固定 = 所有数据列都是固定的
    可变 = 只要有一个是可变的(为了节省空间 MySQL会把固定长度变成可变长度)
    例外:长度小于4个字符的char数据列不会被转换为varchar类型

  9. char 字段常用的场景
    身份证号,手机号,电话,密码

PS这么整理,方便记忆。

参考链接: http://www.cnblogs.com/Lance–blog/p/5193027.html
参考链接: http://www.jb51.net/article/23575.htm