MySQL记录的长度

MySQL中的记录长度不超过65535字节,varchar类型的字段长度受字符集影响,如UTF8最大存储21844字符,GBK为32766字符。若要利用完整长度,可添加tinyint字段。当存在允许为空的字段时,系统会预留1字节存储NULL,所有字段不允许为空可释放此字节。text类型虽额外存储,但会占用记录10字节存储地址和长度。

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

MySQL记录的长度

Mysql中规定:任何一条记录最长不超过不超过65535个字节,(varchar永远达不到理论值)

Varchar实际存储长度能达到多少呢?看字符集编码

Utf8下的varchar的实际顶配
21844字符
Gbk下的varchar的实际顶配
32766字符

-- 求出 varchar 在utf8和gbk下的实际最大值

Create table my_utf8(
Name varchar(65535)
)charset utf8;

Create table my_gbk(
Name varchar(65535)
)charset gbk;

这里写图片描述

Create table my_utf8(
Name varchar(21844)   -- 21844*3  +2 =65535 +2 = 65534
)charset utf8;

Create table my_gbk(
Name varchar(32766)  -- 327676*2 +2 = 65532+2=65534
)charset gbk;

这里写图片描述
这里写图片描述
这里写图片描述

想用完整的65535个字节长度
增加tinyint字段

Create table my_utf81(
Age tinyint,  -- 1
Name varchar(21844)   -- 21844*3  +2 =65535 +2 = 65534
)charset utf8;

Create table my_gbk1(
Age tinyint,  -- 2
Name varchar(32766)  -- 327676*2 +2 = 65532+2=65534
)charset gbk;

这里写图片描述
Mysql 记录中:如果有任何一个字段允许为空,那么系统会自动从整个记录中保留一个字节来存储NULL,多条记录字段也是一个字节来存储NULL(若想释放NULL所占用的字节,必须保证所有的字段都不允许为空)

-- 释放NULL
Create table my_utf82(
Age tinyint not NULL,  -- 1
Name varchar(21844) not NULL  -- 21844*3  +2 =65535 +2 = 65534
)charset utf8;

Create table my_gbk2(
Age tinyint not NULL,  -- 2
Name varchar(32766) not NULL  -- 327676*2 +2 = 65532+2=65534
)charset gbk;

这里写图片描述

Mysql中text文本字符串,不占用记录长度,额外存储,但是text文本字符串也是属于记录的一般部分:一定需要占据记录的部分长度:10个字节(保存数据的地址以及长度)

-- text 占用十个字节长度

Create table my_utf83(
Name varchar(21841) not NULL,
Content text not NULL
)charset utf8;

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值