Mysql中varchar与char的区别以及varchar(30)中的30代表的涵义

mysqlvarcharchar的区别以及varchar(30)中的30代表的涵义

       (1varcharchar的区别

varchar存储可变长字符串,小于255字节时需要1个额外字节(大于255需要2个额外字节)存储长度,最大长度为65532字节(所有列总和);

char存储定长(right padding,读取时会截断末尾空格,长度最大为255字符;

char varchar都是用来存储字符串的,只是他们的保存方式不一样,char有固定的长度,而varchar属于可变长的字符类型。

char是一种固定长度的类型,varchar则是一种可变长度的类型。

char(M)类型的数据列里,每个值都占用M个字节,如果某个长度小于MMySQL就会在它的右边用空格字符补足。(在检索操作中那些填补出来的空格字符将被去掉)在varcharM)类型的数据列里,每个值只占用刚好够用的字节再加上一个用来记录其长度的字节(即总长度为L+1字节)。

建议:

myisam存储引擎建议使用固定长度,数据列代替可变长度的数据列。

memory存储引擎目前都使用固定数据行存储,因此无论使用charvarchar列都没有关系。

Innodb存储引擎建议使用varchar类型。

MySQL中用来判断是否需要进行对数据列类型转换的规则:

1. 在一个数据表里,如果每一个数据列的长度都是固定的,那么每一个数据行的长度也将是固定的。

2. 只要数据表里有一个数据列的长度是可变的,那么各数据行的长度都是可变的。

3. 如果某个数据表里的数据行的长度是可变的,那么为了节约存储空间,MySQL会把这个数据表里的固定长度类型的数据列转换为相应的可变长度类型。

     对于MyISAM表,尽量使用char,对于那些经常需要修改而容易形成碎片的myisamisam数据表就更是如此,它的缺点就是占用磁盘空间;

     对于InnoDB表,因为它的数据行内部存储格式对固定长度的数据行和可变长度的数据行不加区分(所有数据行共用一个表头部分,这个表头部分存放着指向各个有关数据列的指针),所以使用char类型不见得会比使用varchar类型好。事实上,因为char类型通常要比varchar类型占用更多的空间,所以从减少空间占用量和减少磁盘i/o的角度,使用varchar类型反而更有利。

       (2varchar(30)30的涵义

     最大存储30个字符;varchar5)和(200)存储hello所占空间一样,但后者在排序时会消耗更多内存,因为order by col 采用fixed_length计算col长度(memory)引擎一样。

     For example, a varchar(255) column can hold a string with a maximum length of 255 characters(字符而非字节),对于latin1, ‘abcd’的L4,存储需要5个字节;对于ucs2(双字节字符),则需要10个字节存储(最大长度为510>255,故需要额外2个字节)

       (3int20)中20的涵义

     20表示最大显示宽度为20,但仍占4个字节存储,存储范围不变;

create table int_test(a int zerofill NOT NULL auto_increment, PRIMARY KEY (a));

create table int_test_4(a int(4) zerofill NOT NULL auto_increment, PRIMARY KEY (a));

select * from int_test;
+------------+
| a          |
+------------+
| 0000000001 |
| 0000000002 |
| 0000000003 |
| 2147483648 |
+------------+

select * from int_test_4;
+------------+
| a          |
+------------+
|       0001 |
|       0002 |
|       0003 |
| 2147483648 |
+------------+

       (4)为什么MySQL这样设计?

    对大多数应用没有意义,只是规定一些工具用来显示字符的个数;int(1)int(20)存储和结算均一样。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/21374452/viewspace-2136268/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/21374452/viewspace-2136268/

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值