7、字符型

时光毁灭记忆、已成空白 提交于 2019-12-01 06:17:42

char -- varchar -- text -- blod

1、char和varchar分别称为定长和变长类型

  • 定长效率高,查找行纪录时,如果都是定长,完全可以通过行数与行的长度计算出来,文件指针的偏移量
    如:char(6),想查找第三个人名,指针只需从存储的首地址往后移动3*6=18个字符就行。
  • 定长浪费空间,不论够不够指定长度,实际都占据N个长度,如果不够N个长度,用空格在末尾补至N个长度
    如:char(N),不够N个长度,用空格在尾部补够N个长度,浪费了尾部
  • char型,不够M格字符用空格补,取出的时候再把右侧的空格删掉,这意味者,如果右侧本身有空格,将会丢失。
  • 对于varchar(N),不用空格补齐,但是在列内容前,用1-2个字节来标志该列的长度
  • 定长字符空间利用率能达到100%;变长类型不能,每个字段需要额外的1~2个字节存储该字段的长度。
  • 注意:char(M),varchar(M)限制的是字符,不是字节。
    如char(2) charset utf8,能存2个utf8字符,比如“中国”,“ab”。
类型宽度可存字符实际字符(i<=M)实占空间利用率
char M M i M i/M<=100%
varchar M M i i字符+(1~2)字节 i/(i+1~2)<100%

char(M),M代表宽度,0<=M<=255之间
varchar(M),M代表宽度,0<=M<=65535(以ascii字符为例,utf8 22000左右)

create table test(
ca char(6) not null default '',
vca varchar(6) not null default ''
)engine myisam charset utf8;

insert into test values ('aa ','aa ');
select concat(ca,'!'), concat(vca,'!') from test;

+----------------+-----------------+
| concat(ca,'!') | concat(vca,'!') |
+----------------+-----------------+
| aa!            | aa !            |
+----------------+-----------------+
1 row in set
显示:char类型字符后的空格丢失

2、text

  • 文本类型,可以存储比较大的文本字段,搜索速度稍慢,因此不是特别大的字符,建议用char,varchar来代替。
  • 一般用来存储文章内容,新闻内容等
  • text不用加默认值(加了也没用)

代码:

create table test2(
article text
);

3、blob的意义

  • blob是二进制类型,用来存储图像、音频等二进制信息。
  • 意义:2进制,0-255都有可能出现,blob在于防止因为字符集的问题,导致信息的丢失
    比如:一张图片中有0XFF字节,这个在ascii字符集认为非法,在入库的时候,被过滤了

代码:

alter table test2 add img blob;
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!