MySQL 列类型-字符串型

字符串类型

 

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:001
football:010
swim:100
*/




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值