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个字节表示长度。
因此65535 - 2 = 65533 。
另外,整条记录需要一个额外的字节,用于保存当前哪个字段是null值。
除非所有字段都不是null,这个字节才可以省略。
1 create table s_1( 2 a varchar(65533) not null //所有字节都不是null,不需要保存null值 3 )character set latin1; 4 5 create table s_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。



浙公网安备 33010602011771号