MySQL的varchar类型字段

本文深入解析MySQL中VARCHAR字段的特点,包括其从字节长度到字符长度的转变历程,存储方式及长度扩充机制。探讨了不同MySQL版本下VARCHAR字段长度计算的区别,以及在升级字段长度时的性能考量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

业务变化,前端要求增加一个传输字段的长度,得到的一些mysql varchar字段的知识;

 

目录

varchar长度是字符长度,不是字节长度:

VARCHAR的存储:   

VARCHAR的长度扩充--能不能快速


varchar长度是字符长度,不是字节长度:

现在使用的,应该都是 mysql5 以上的版本,所以才会说 varchar的长度是字符长度,不是字节长度;这个是mysql4到mysql5的变化,mysql4和以前版本,varchar是按照字节长度来算的;到了mysql5开始,按照字符来算;

 

VARCHAR的存储:   

varchar是可变长度的字段类型,可以从0---65535(行最大长度65535bytes)

     varchar会使用1个字节,或者2个字节(byte)放在在数据前,表示数据有多少字节(bytes);如果字段长度不超过255字节那就使用1byte,否则使用2bytes;

( 这一段,mysql5.7的文档和8.0的文档中,一模一样;
      https://dev.mysql.com/doc/refman/5.7/en/char.html
      https://dev.mysql.com/doc/refman/8.0/en/char.html

按照第一条,varchar(X)的字节长度是 X * character set 长度;

    如果使用了 utf8,那么一个字符就是3个字节;varchar(6)的长度是 : 6*3=18字节;

VARCHAR的长度扩充--能不能快速

varchar的长度扩充,在mysql5.6或以下版本,varchar字段扩充长度,都需要对每个单元格进行copy处理;

在mysql5.6以上的版本,如果满足一定的条件,增加参数 ALGORITHM=INPLACE,就可以瞬间完成;

那是什么条件呢? 就是上述第二点中的说明,varchar在存储时,会使用1byte或者2byte来表示value的长度;字段扩充后,如果这个标识的长度不变化,就可以瞬间完成,否则只能数据重写了;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值