mysql char text_MySQl中的char varchar text

char

查询速度:char最快

最大长度:255个字符,utf-8编码的话,占用255 * 3个字节

占用空间:n

其他:

在获取数据出来之后,一定要记得trim空格,因为不足char(n)的长度,会自动填充空格

因为定长的char不容易产生碎片,所以char比varchar在空间上也更有效率

varchar

查询速度:varchar次之

最大长度:65535个字节

占用空间:实际空间 + 1,会使用1-3个字节来存储长度,如果整体长度在0-255bytes之间,长度使用1个字节表示,如果长度在255以上,那么就是2个字节,varchar(10)需要11个存储空间,varchar(1001)需要1002个存储空间

其他

官方手册定义的varchar最大长度65535指的是所有varchar列长的总和

text

查询速度:text最慢

最大长度:跟varchar基本相同,保存65535个字符

占用空间:存储2个字节长度

TEXT:最大限制也是64k个字节,但是本质是溢出存储,innodb默认只会存放前768字节在数据页中,而剩余的数据则会存储在溢出段中,虽然也受单表65535最大行宽度限制,但mysql表中每个BLOB和TEXT列实际只占其中的5至9个字节,其他部分将进行溢出存储.所以实际占用表最大行宽度为9+2字节,外加的是额外开销,跟表的实际宽度没有关系.

1.如果使用utf-8字符集,那么单字段占用最大长度也是21844个字符.

2.不过单表可以设置多个text字段,这就突破了单表最大行宽度65535的限制

其他text:

text字段是分长中短类型,不像varchar只有一种,除了上面的text,还有下面三个.

TinyText:最大长度255个字节,实际上是个没什么意义的类型了.

MEDIUMTEXT:最大长度限制16M个字节。和普通text一样也支持溢出存储,所以实际占用表最大行宽度为9+3字节,外加的是额外开销

LONGTEXT:最大长度限制4G个字节。和普通text一样也支持溢出存储,所以实际占用表最大行宽度为9+4字节,外加的是额外开销

--------------------------------------------------------

额外占用空间开销说明:

varchar 小于255byte  1byte overhead

varchar 大于255byte  2byte overhead

tinytext 0-255 1 byte overhead

text 0-65535 byte 2 byte overhead

mediumtext 0-16M  3 byte overhead

longtext 0-4Gb 4byte overhead

注意:

虽然text字段会把超过768字节的大部分数据溢出存放到硬盘其他空间,看上去是会更加增加磁盘压力.但从处理形态上来讲varchar大于768字节后,实质上存储和text差别不是太大了.因为超长的varchar也是会用到溢出存储,读取该行也是要去读硬盘然后加载到内存,基本认为是一样的。

另外从8000byte这个点说明一下,mysql的innodb data page默认一个数据页是16K,要存两行数据,所以对于varcahr, text如果一行数据不超过8000byte ,overflow不会存到别的page中。

----------------------------------------

差异点:

text字段,MySQL不允许有默认值。建立索引必须给出前缀索引长度.

varchar允许有默认值,对索引长度没限制,

注意:

InnoDB引擎单一字段索引的默认长度最大为767字节,myisam为1000字节.例如字符编码是utf8,那么varchar的索引最大长度是256个字符.超出限制会导致索引创建不成功,转而需要创建前缀索引.设置innodb_large_prefix=1可以增大限制,允许索引使用动态压缩,但是表的row_format必须是compressed或者dynamic.可以使索引列长度大于767bytes,但是总长度不能大于3072

bytes.

----------------------------------------

总结:

根据存储的实现:可以考虑用varchar替代text,因为varchar存储更弹性,存储数据少的话性能更高

如果需要非空的默认值,就必须使用varchar

如果存储的数据大于64K,就必须使用到mediumtext , longtext,因为varchar已经存不下了

如果varchar(255+)之后,和text在存储机制是一样的,性能也相差无几

需要特别注意varchar(255)不只是255byte ,实质上有可能占用的更多。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值