【刷题】面筋-MySQL中char、varchar和text三者的区别

概述

在MySQL中,char、varchar和text类型的字段均可以用来存储字符类型的数据,函数

char、varchar均可以指定最大的字符长度,但text不能够。
它们的存储方式和数据的检索方式也都不同。
数据的检索效率是:char > varchar > text性能

具体说明:

  • char:

    • 存储定长数据很方便,CHAR字段上的索引效率级高,必须在括号里定义长度,能够有默认值,好比定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间(自动用空格填充),且在检索的时候后面的空格会隐藏掉,因此检索出来的数据须要记得用trim之类的函数去过滤空格。
  • varchar:

    • 存储变长数据,但存储效率没有char高,必须在括号里定义长度,能够有默认值。保存数据的时候,不进行空格自动填充,并且若是数据存在空格时,当值保存和检索时尾部的空格仍会保留。另外,varchar类型的实际长度是它的值的实际长度+1,这一个字节用于保存实际使用了多大的长度。
  • text:

    • 存储可变长度的非Unicode数据,最大长度为2^16-1个字符。text列不能有默认值,存储或检索过程当中,不存在大小写转换,后面若是指定长度,不会报错误,可是这个长度是不起做用的,意思就是你插入数据的时候,超过你指定的长度仍是能够正常插入。

关于存储空间:

在使用UTF8字符集的时候,MySQL手册上是这样描述的:code

  • 基本拉丁字母、数字和标点符号使用一个字节;
  • 大多数的欧洲和中东手写字母适合两个字节序列:扩展的拉丁字母(包括发音符号、长音符号、重音符号、低音符号和其它音符)、西里尔字母、希腊语、亚美尼亚语、希伯来语、阿拉伯语、叙利亚语和其它语言;
  • 韩语、中文和日本象形文字使用三个字节序列。

结论:

  • 常常变化的字段用varchar;
  • 知道固定长度的用char;
  • 超过255字节的只能用varchar或者text;
  • 能用varchar的地方不用text;
  • 可以用数字类型的字段尽可能选择数字类型而不用字符串类型,这会下降查询和链接的性能,并会增长存储开销。这是由于引擎在处理查询和链接回逐个比较字符串中每个字符,而对于数字型而言只须要比较一次就够了;
  • 同一张表出现多个大字段,能合并时尽可能合并,不能合并时考虑分表

END

相关文章
相关标签/搜索