VARCHAR、CHAR的选择

本文详细阐述了Char和Varchar两种数据类型的特性及适用场景。Char为固定长度字符类型,适合数据项大小一致的情况;Varchar则为可变长度字符类型,适用于数据项大小差异较大的情况。此外还介绍了MySQL对于这两种数据类型的处理方式。

  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/archive/2011/06/11/2078552.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值