关闭

[置顶] 【MySQL进阶】--char & varchar & text的区别

1922人阅读 评论(14) 收藏 举报


    最近在设计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 检索 存储


2
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:199130次
    • 积分:8603
    • 等级:
    • 排名:第2227名
    • 原创:171篇
    • 转载:8篇
    • 译文:0篇
    • 评论:3307条
    博客专栏