MySQL--基础知识点--7--char、varchar、text的区别

在MySQL中,char、varchar和text类型的字段都可以用来存储字符类型的数据,char、varchar都可以指定最大的字符长度,但text不可以。

它们的存储方式和数据的检索方式也都不一样。

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

char:

  • 长度范围0~255个字节
  • 定长字符串
  • 可以有默认值
  • 数据长度不足指定长度时,自动用空格填充。
  • 数据尾部空格。保存时会忽略,与查询条件对比时会忽略,读取时会忽略。本质是因为数据长度不足指定长度时,自动用空格填充。自动填充的空格不被认为是数据本身。
  • 存储或检索过程中不进行大小写转换

varchar:

  • 长度范围,5.0.3版本以下0~255个字节,5.0.3版本以上0~65535个字节。
  • 变长字符串
  • 可以有默认值
  • 数据长度不足指定长度时,不会用空格填充。
  • 数据尾部空格。保存时会保存,与查询条件对比时会忽略,读取时不会忽略。
  • 而且如果数据存在空格时,当值保存和检索时尾部的空格仍会保留。
  • 另外,varchar类型的实际长度是它的值的实际长度+1,这一个字节用于保存实际使用了多大的长度。
  • 存储或检索过程中不进行大小写转换

text:

  • 长度范围0~65535个字节。
  • 长文本数据,varchar的加长增强版,可变长。
  • 没有默认值。
  • 存储或检索过程中不进行大小写转换
  • 后面如果指定长度,不会报错误,但是这个长度是不起作用的,意思就是你插入数据的时候,超过你指定的长度还是可以正常插入。
  • 给blob或text创建index的时候,必须指定索引长度。

关于存储空间:

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

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

结论:

1、经常变化的字段用varchar;

2、知道固定长度的用char;

3、超过255字节的只能用varchar或者text;

4、能用varchar的地方不用text;

5、能够用数字类型的字段尽量选择数字类型而不用字符串类型,这会降低查询和连接的性能,并会增加存储开销。这是因为引擎在处理查询和连接回逐个比较字符串中每一个字符,而对于数字型而言只需要比较一次就够了;

6、同一张表出现多个大字段,能合并时尽量合并,不能合并时考虑分表

7、对于MyISAM表,推荐char类型;对于InnoDB表,推荐使用varchar类型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值