mysql可变字符串_MySQL:字符串类型字符串型: set , enum , blob , text , varchar , char。
1. char (字符)
格式:char(M)  固定长度
M 表⽰严格限定的长度。
char(5)
varchar(5)
''
5字节
1字节
需要⼀个字节,保存字符串的总长度
'abc'
5
4
'abcde'
5
6
'abcdef'
超出限制,插⼊不成功
插⼊不成功
效率相对⾼
空间控制好
2. varchar(变长字符串)
格式:varchar(M)  可变长度
M 表⽰允许的最⼤长度。
预留了⼀个字节,保存字符串的长度。
当读取了该长度的字符串时,便不再继续读取了。
eg. 当存固定长度的字符串(如 ⾝份证号,⼿机号码),使⽤char ,速度快,不会造成空间的浪费;
tip: M 表⽰的是字节数,⽽不是字节数。
但总的长度是按照字节数计算的。
真实的varchar长度:总长度65535,
varchar的特点:当类型数据超过255个字符时,采⽤2个字节表⽰长度。varchar2最大长度
因此65535 - 2 = 65533 。
另外,整条记录需要⼀个额外的字节,⽤于保存当前哪个字段是null值。
除⾮所有字段都不是null,这个字节才可以省略。
1 create tables_1(
2 a varchar(65533) not null //所有字节都不是null,不需要保存null值
3 )character setlatin1;4
5 create tables_2(
6 a varchar(65532) //65535中,2个字节保存长度,1个字节保存当前哪个字段是null值
7 )character set latin1;⽽当table中有其他的列时,
tinyint本⾝占1字节,varchar需要2字节保存⾃⾝的长度。若⼆者都是not null,那可以省去保存null的字段,
varchar可以占⽤65535 - 1 - 2 = 65532,如下图第⼀张所⽰:
若a、b中任何⼀个不写not null,则保存null的字段就必须存在,占⽤1个字节,此时varchar最⼤只能是65532 - 1 = 65531。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。