char和varchar分别称为定长和变长类型
对于定长char(N)
不论够不够长度,实际都占据N个长度
如果不够N个长度,用空格在末尾补到N个长度
而对于varchar不用空格补齐,但列内容前,有1-2个字节来标志该列的内容长度
char(M) 宽度在 0<=M<=255
varchar(M) 宽度在 0<=M<=65535
定长速度快些
mysql> create table test(
-> ca char(6) not null default '',
-> vac varchar(6) not null default ''
-> )engine simyam charset utf8;
mysql> insert into test values ('hello','hello');
mysql> select * from test
查看下我们没有看到什么区别
再加一行,在aa后面加两个个空格
mysql> insert into test values ('aa ','aa ');
再select下查看还是看不出,用下面一句我们就能看到区别了
mysql> select concat(ca,'!'),concat(vac,'!') from test;
mysql> select * from test;
+-----------------+-----------------+
| concat (ca,'!') | concat(vac,'!') |
+-----------------+-----------------+
| hello! | hello! |
| aa! | aa ! |
+-----------------+-----------------+
这次能清楚看到区别了,
原因是char型如果不够M个字符,内部用空格补齐,取出时再把右侧空格删掉
这意味着如果右侧本身有空格,将会丢失
concat函数是连接字符串用的
注意:char(M),varchar(M)中的M限制的是字符数,不是字节数
即 char(2) charset utf8 能存2个utf8字符,比如“中国”
例:插入一行
insert into test values ('中国','在人民共和国');
事实上不是存两个而是6个,因为M代表的是字符。如果在写入超过定义的6个也能插入,但是在查看的时候我们发现会自动把超过的字符去掉
还有一种错误认识,既然是字符,6个utf8中文,那就是18个字节,我存两个单词不成问题吧
insert into test values ('hello world','pretty women');
我们会发现也可以录入,但是在查看的时候还是只有6个字符,后面的都省略了,
这是因为我使用的mysql版本是5以上的,如果是5以下的会报错不能写入
这是因为如果定义是utf8存6个字符,就只能存6个utf8的字符,定义是GBK也是一样。
text 文本类型,可以存比较大的文本段,搜索速度慢
因此,如果不是特别大的内容,建议用varchar char
声明text列时,不必给默认值(加了也没用)
mysql> create table test2(
-> artice text );
下面看下
#blob的意义
mysql> alter table test2 add img blob;
这个blob是二进制类型,用来存储图像,音频等二进制信息
下面我存几个字符看下
mysql> insert into test2 values ('拔苗助长','朋友别走');
也插入成功了,这不是存二进制的吗?那还有什么意义呢?
意义:二进制字符从0-255都有可能出现,
blob类型在于防止因为字符集的问题,导致信息丢失
比如:一张图片中有0xFF字节,这个ascii字符集认为非法,在入库的时候,被过滤了,所以主要防止字符集乱码
字符型弄详解
原创
©著作权归作者所有:来自51CTO博客作者shansongxian的原创作品,如需转载,请与作者联系,否则将追究法律责任
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
泛型详解
泛型详解
泛型 -
python字符型 python字符型和数值型的区别
python最基本的内置数据类型包括: 布尔型:表示真假的类型,只有True和False两种取值。整型:整数,例如34。浮点型:小数,例如3.98。字符串型:字符组成的序列。 变量、名字和对象python里所有数据,布尔型、整数、浮点型、字符串型,甚至大型数据结构、函数以及程序,都是以对象的形式存在。对象就像一个塑料盒子,里面装的是数据。对象有不同类型,
python字符型 python 字符 数字比较 python 字符串转数字 python 数字转字符串 python四舍五入取整数 -
泛型代码详解java 泛型 参数化类型 .net 泛型方法