Mysql

关注公众号 jb51net

关闭
首页 > 数据库 > Mysql > MySQL VARCHAR TEXT

MySQL中VARCHAR和TEXT的区别小结

作者:笑衬人心。

MySQL中VARCHAR和TEXT用于存储字符串,VARCHAR可变长度存储在行内,适合短文本;TEXT存储在溢出页,适合大文本,下面就来具体的了解一下两者的区别,感兴趣的可以了解一下

在 MySQL 表设计中,字符串字段常用 VARCHARTEXT 类型,但它们在 存储方式、性能、使用限制 等方面存在明显区别。

一、VARCHAR 和 TEXT 基本介绍

1. VARCHAR

2. TEXT

二、VARCHAR 和 TEXT 的主要区别

对比项VARCHARTEXT
存储方式存储在 行内(页内),长度小于页大小(16KB)存储在 独立溢出页,行内只保存指针(20字节)
最大长度受表行大小限制(理论 65535 字节)TEXT 类型分为 TINYTEXT ~ LONGTEXT
是否需要指定长度需要(如 VARCHAR(255))不需要(直接使用 TEXT)
默认值支持支持不支持
是否可以创建索引可以,且索引长度可以完整覆盖可以,但必须指定前缀长度(如 INDEX(title(100))
占用存储字符串实际长度 + 1 或 2 字节长度信息只存储 20B 指针,数据在溢出页
性能访问速度快(行内存储)较慢(需要额外读取溢出页)
适合场景用户名、邮箱、标题评论、正文、描述

三、存储结构差异

VARCHAR

TEXT

四、索引方面的区别

五、内存占用差异

六、应用场景对比

场景推荐类型
用户名、邮箱、标题VARCHAR(50~255)
文章正文、长评论TEXT(或 MEDIUMTEXT)
大量短文本,需频繁查询VARCHAR
大字段,偶尔查询TEXT

七、限制与注意事项

  1. TEXT 字段不能有默认值。
  2. TEXT 字段不能直接排序,需要指定前缀:
    SELECT * FROM articles ORDER BY SUBSTRING(content, 1, 100);
    
  3. TEXT 字段不能设置 FULLTEXT 索引,除非引擎支持(InnoDB 5.6+)。
  4. VARCHAR 受行大小限制,单行最大 65535 字节(不包括 BLOB/TEXT 外存数据)。

八、面试高频问答

Q1:VARCHAR 和 TEXT 的存储方式区别?

Q2:TEXT 字段为什么不能有默认值?

Q3:TEXT 可以建索引吗?

Q4:TEXT 查询为什么比 VARCHAR 慢?

Q5:什么时候选择 TEXT?

九、总结

维度VARCHARTEXT
存储方式行内页外
是否指定长度必须不需要
默认值支持支持不支持
索引支持完整支持必须指定前缀
性能较低
适用场景短字符串长文本

实践

到此这篇关于MySQL中VARCHAR和TEXT的区别的文章就介绍到这了,更多相关MySQL VARCHAR TEXT内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

您可能感兴趣的文章:
阅读全文