首页 » Mysql » 正文

MySQL字符串类型char,varchar,text,blob详解

2016-1-15 ·  7,791 views  ·  0 replies 

简单来看:

char是定长

varchar是可变长度

char效率要比varchar高一些,因为如果是定长,在寻址的时候会很方便的可以简单理解为(d-1)*N

比如要查第三个,则可以直接移动2N

对于定长N

不论够不够指定长度,实际都占用N个指定长度,如果不够指定长度,会在末尾用空格补至N个长度,浪费了尾部,但是当检索到CHAR值时,尾部的空格被删除掉。

char的范围为0-255

VARCHAR列中的值为可变长字符串。长度可以指定为0到65,535之间的值。(VARCHAR的最大有效长度由最大行大小和使用的字符集确定。整体最大长度是65,532字节)。

同CHAR对比,VARCHAR值保存时只保存需要的字符数,另加一个字节来记录长度(如果列声明的长度超过255,则使用两个字节)。

VARCHAR值保存时不进行填充。当值保存和检索时尾部的空格仍保留,符合标准SQL。

如果插入字符时,长度不够,mysql会自动裁剪,如果被裁剪掉的字符不是空格,则会产生一条警告。如果裁剪非空格字符,则会造成错误(而不是警告)并通过使用严格SQL模式禁用值的插入。

同CHAR对比,VARCHAR值保存时只保存需要的字符数,另加一个字节来记录长度(如果列声明的长度超过255,则使用两个字节)。

下面举例说明,样例出自MySQL5.1手册

下面的表显示了将各种字符串值保存到CHAR(4)和VARCHAR(4)列后的结果,说明了CHAR和VARCHAR之间的差别:

CHAR(4) 存储需求 VARCHAR(4) 存储需求
‘    ‘ 4个字节 1个字节
‘ab’ ‘ab  ‘ 4个字节 ‘ab ‘ 3个字节
‘abcd’ ‘abcd’ 4个字节 ‘abcd’ 5个字节
‘abcdefgh’ ‘abcd’ 4个字节 ‘abcd’ 5个字节

注意:在char和varchar一定要注意char在取数据时,会删除末尾空格,因此当定义了char时,如果存入”ab     “这样的数据到mysql中,取出数据的时候,mysql会删掉后面的空格

char(M)和varchar(M)限制的是字符,并不是字节

varchar可以存65535

char可以存255

上面都是指的字符

举例说明:

char(6)  utf8的字符编码,则可以存‘中华人民共和’六个字符,所以在utf8下一个中文字符占用3个字节,所以一共是18个字节

gbk一个汉字占用2个字节

这里占了18个字节,并不是可以存18个英语字母,还是只能存18个字母,数字同理

text存储文本

blob存储二进制类型

blob在于防止因为字符集的问题,导致信息丢失

«上一篇: :下一篇»
  1. 还没有任何评论,你来说两句吧

Leave a reply