mysql varchar 与text_mysql的varchar与text对比

大小对比

VARCHAR :varchar在mysql中满足最大行限制,也就是 65535(16k)字节,在mysql中使用 uft-8(mysql中的 utf-8 和我们正常的编码utf-8不同)字符集一个字符占用三个字节,

①使用utf-8字符编码集varchar最大长度是(65535-2)/3=21844个字符(超过255个字符会有2字节的额外占用空间开销,所以减2,如果是255以下,则减1)。

②使用 utf-8mb4 字符集(mysql中 utf-8mb4 字符集也就是我们通常使用的 utf-8 字符集),mysql中使用 utf-8mb4 字符集一个字符占用4个字节,所以 varchar 最大长度是(65535-2)/4=16383 个字符(超过255个字符会有2字节的额外占用空间开销,所以减2,如果是255以下,则减1)。

TEXT :最大限制是64k,

采用 utf-8 字符集,(262144-2)/3=87381 个字符。

采用 utf-8mb4字符集,(262144-2)/4=65535 个字符。

MEDIUMTEXT  :最大长度限制16M  (16M-3)/3 = 5,592,405 个字符

LONGTEXT :最大长度限制4G

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

额外占用空间开销说明:

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

从处理形态上来讲varchar 大于768字节后,实质上存储和text差别不是太大了.基本认为是一样的。另外从8000byte这个点说明一下:对于varcahr, text如果行不超过8000byte(大约的数,innodb data page的一半) ,overflow不会存到别的page中。

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

差异点:

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

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

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

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

总结:

根据存储的实现: 可以考虑用varchar替代tinytext

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

如果存储的数据大于64K,就必须使用到mediumtext , longtext

varchar(255+)和text在存储机制是一样的

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

感谢吴炳锡老师指导

参考文章地址:http://wubx.net/varchar-vs-text/

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值