【MySQL进阶】--char & varchar & text的区别

原创 2015年11月18日 21:53:25


    最近在设计MySQL数据库表时,用到了char和varchar类型,另外还接触到了text类型。他们的存储方式和数据的

检索方式都不一样,今天就对三者之间的异同进行一下总结。


首先要明确的三点:

1.char长度固定,varchar和text长度可变。

2.char和varchar可以设定默认值,text没有默认值。

3.char和varchar定义时要指定长度,text定义时通常不用指定长度,可以自己计算。


接下来分别看一下三个类型的存储和检索特点


char


最大长度255个字符,表现形式Char(M),M表示严格限定的字符数。 注意:是字符数,跟字符集的设定没有关系。

在保存字符串的时候,如果字符串长度不够,则后面用空格补足空字符串会造成空间浪费。

在检索的时候后面的空格会去掉,所以检索出来的数据需要再用trim之类的函数去处理。


varchar


最大长度65535个字节,表现形式Varchar(M),M表示允许的最大字符串长度。注意:是字节数,跟字符集有关。


注意:这里的65535在实际应用中限制的不再是某一列而是一个行定义的长度,要考虑到其它的column。


在保存字符串的时候,不进行填充,节省空间。当值保存和检索时尾部的空格仍保留。


高频率面试题:varchar类型长度范围65535,实际范围为65532或65533。为什么?


    varchar存储字符串的同时会在内容开头用1到2个字节保存该字符串的实际长度(小于255采用一个字节保存,长

度超过255时需要2个字节),还有如果存在not null的时候,整条记录需要一个额外的字节来保存当前字段的null

值,也会占用一位。除非所有的字段都不是null,这个字节才可以省略。因此varchar定义的最大长度为65535,实际

长度为65532或65533.

第一段提到,varchar最大长度是65535字节,因此对不同的字符集,有效长度还不一样。

字符类型若为gbk, 每个字符最多占2个字节,最大长度不能超过32767;

字符类型若为utf8,每个字符最多占3个字节,最大长度不能超过21845。




text


   text和varchar基本相同,但是text会忽略指定的大小这和varchar有所不同。后面如果指定长度,不会报错误,

但是这个长度是不起作用的,意思就是你插入数据的时候,超过你指定的长度还是可以正常插入。存储或检索过程

中,不存在大小写转换.text的65535字节全部用来存储数据,使用额外的2个字节来存储数据的大小,varchar根据存

储数据的大小选择用几个字节来存储。


检索效率



char是直接检索,varchar类型需要检索统计字符串的长度然后进行读取相应的位数就停止了,因此是可变长度的,

存储空间控制的好,但是也因此效率低于char类型。text效率就更低了,需要自己计算长度然后进行检索。


数据的检索效率是:char>varchar>text



适用范围
   

1. 经常变化的字段用varchar,例如昵称、描述信息等等。
   

2. 知道固定长度的用char,例如身份证号,手机号
   

3. 尽量用varchar,能用varchar的地方不用text
   

4. 超过255字节的只能用varchar或者text,超过varchar范围的会自动强制转换为text类型
   



关键字:mysql char varchar text 65535 65532 检索 存储


版权声明:本文为博主原创文章,未经博主允许不得转载。

mysql中char,varchar与text类型的区别和选用

关于char,varchar与text平时没有太在意,一般来说,可能现在大家都是用varchar。但是当要存储的内容比较大时,究竟是选择varchar还是text呢?不知道。。。。。。 于是去查阅了...

数据库中CHAR,VARCHAR,TEXT等字段的区别

很多开发者进行数据库设计的时候往往并没有太多的考虑char, varchar类型,有的是根本就没注意,因为存储价格变得越来越便宜了,忘记了最开始的一些基本设计理论和原则,这点让我想到了现在的年轻人,大...
  • a347911
  • a347911
  • 2015年08月04日 18:03
  • 6322

MySQL中char、varchar和text的区别

它们的存储方式和数据的检索方式都不一样。 数据的检索效率是:char > varchar > text 空间占用方面,就要具体情况具体分析了。 char:存储定长数据很方便,CHAR字段上的...

mysql中char,varchar,text区别

char:       char最大长度是255字符,注意是字符数和字符集没关系。可以有默认值,尾部有空格会被截断。 varchar:       varchar的最大长度65535是指能存储的...

mysql中char,varchar,text区别个人总结

具体对这三种类型的说明不做阐述可以查看mysql帮助文档。char的总结:      char最大长度是255字符,注意是字符数和字符集没关系。可以有默认值,尾部有空格会被截断。varchar的总结:...

MySQL之char、varchar和text的设计

from: http://www.cnblogs.com/billyxp/p/3548540.html 最近有表结构设计中出现了varchar(10000)的设计引起了大家的讨论,我们下面...
  • hotdust
  • hotdust
  • 2016年06月15日 09:45
  • 1034

mysql列类型char,varchar,text,tinytext,mediumtext,longtext的比较与选择

mysql列类型char,varchar,text,tinytext,mediumtext,longtext的比较与选择 储存不区分大小写的字符数据 TINYTEXT 最大长度是 25...

MySql中的CHAR、VARCHAR、TEXT与BLOB类型

今天新开始的项目在做数据库设计,发现自己对MySql的varchar类型还不熟悉,故又上网收集资料整理如下。 1.varchar类型的变化 MySQL 数据库的varchar类型在4.1以下的版本...

mysql中char、varchar、text区别和存储范围

char的总结:       char最大长度是255字节,是定长格式,长度不足,后边添加空格方式来存储,注意是字节,而不是字符。可以有默认值,检索时尾部有空格会被截断。存储范围为255或者25...

MySQL中char,varchar与text类型的区别和选用

关于char,varchar与text平时没有太在意,一般来说,可能现在大家都是用varchar。但是当要存储的内容比较大时,究竟是选择varchar还是text呢?不知道。。。。。。 于是去查...
  • liuzx32
  • liuzx32
  • 2015年05月06日 16:53
  • 322
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【MySQL进阶】--char & varchar & text的区别
举报原因:
原因补充:

(最多只允许输入30个字)