MySQL 列类型-字符串型

来源:互联网 发布:硬盘mac不能写入文件 编辑:程序博客网 时间:2024/06/16 08:13

字符串类型

 

M表示的字符数,而不是字节数

Gbk  255字节 = 127字符数

 

Char (M)(最大255字节):

M表示允许的字符串长度。

规定了一个M长度的字符串。

空间固定为5个字节。

 

Varchar (M)

M表示允许的最大字符串长度

规定了一个最长为M长度的字符串。

空间为当前字符个数+1

 

上两个区别:

           Char(5)/Varchar(5)

‘’(空字符串)     5/1    varchar需要一个字节保存字符串的总长度   

abc            5/4

abcdf          5/6

 

Char 时间效率高于Varchar   (原因:varchar需要计算长度)

Varchar 空间效率高于 Char

 

注意:

字段的最大长度限制

1.类型本身的限制,例如char最大字节255.

2.记录的总长度也有限制.

 

真实的varchar的长度:

总长度65535

 

面试题目:

当类型数据的字符长度超过255个字符时,采用2个字节来表示长度。

65535-2=65533

又由于整条记录需要额外的字节用于保存当前字段的null值。

(有一些字段为null值)。

Null 可以使用与所有字段中,因此需要所有字段都为null

才可以省去null的字节。

此外,定义一个字段时,也需要一段字节数。

 

Text(2^16)65535可以全部用于保存长度,不用计算字符长度,而且不用定义M):

有很多兄弟类型:

Tinytext Long text;

文本框,用户讨论等。

 

Enum 枚举类型(多个已知的选项选一个)

65535  2个字节

表面上是字符串,但内部是整型保存。

Set 集合类型(多个已知的选项不定选择几个)

最多占用8个字节;

1字节=8bit;

最多64个组合类型

 

create table str_1           /* 查看utf-8最大字符数*/(   a varchar (65535))character set uft-8;      /*错误提示最大为21845个字符*/create table str_1          (   a varchar (21845))character set uft-8;        /*错误提示,一个记录有最长长度的限制*/create table str_1          (   a varchar (21844))character set uft-8;        /*成功*/create table str_2           /* 查看gbk最大字符数*/(   a varchar (65535))character set gbk;         /*错误提示最大为个字符*/ create table str_3 (   a varchar (65533))character set latin1;     /*错误提示记录太长*/create table str_3 (   a varchar (65533) not null)character set latin1;    /*成功*/create table str_4(   a varchar (65532),   b tinyint                /*tinyint 占用一个字节长度*/);                         /*错误提示,提示记录太长*/create table str_4(   a varchar (65532)not null,   b tinyint);                         /*错误提示,提示记录太长*/create table str_4(   a varchar (65532) not null,   b tinyint not null);                         /*成功*/create table str_5(   a text,   b text                 /*成功,理论上占用空间(2^16+2)*2 但是在定义时没有计算其所占用的空间*/);create table str_6(gender enum('female','male')              /*enum*/);insert into str_6 values ('male');insert into str_6 values ('female');insert into str_6 values ('other');    /*保存失败,可以+显示内部原因,直到原因后,可以以下操作*/insert into str_6 values ('2');       /*成功*/create table str_7                       /*set*/(hobby set('basketball','football','swim'));insert into str_7 values('basketball,football') /*成功,+0 显示 3 内部以位运算保存*//*状态保存机制basketball:001football:010swim:100*/


0 0
原创粉丝点击