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。

 

posted @ 2017-05-22 16:36  Rebecca_r  阅读(637)  评论(0)    收藏  举报