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;