字符串类型分类与比较


类型描述最大长度存储方式特点
CHAR(M)固定长度字符串255字符定长(M字节)不足长度用空格填充,检索时去除尾部空格
VARCHAR(M)可变长度字符串65,535字符变长(L+1字节)仅占用实际需要空间+1字节(记录长度),保留尾部空格
TINYTEXT短文本字符串255字符L+1字节专门存储较小文本,不删除尾部空格
TEXT常规文本字符串65,535字符L+2字节适合存储文章、评论等内容
MEDIUMTEXT中等长度文本16,777,215字符L+3字节可存储约16MB文本内容
LONGTEXT超长文本4GB内容L+4字节最大文本存储类型
ENUM枚举类型65,535个选项1-2字节只能选择预定义值中的一个,内部用整数索引存储
SET集合类型64个成员1-8字节可选择多个预定义值,用逗号分隔,内部用位图存储

                    

核心类型深度解析

 

1. CHAR与VARCHAR对比

 

存储机制:

 CHAR(4)存储"ab" → "ab  "(补空格到4字节)

 VARCHAR(4)存储"ab" → "ab"(实际2字符+1长度字节=3字节)

 

使用场景:

 CHAR适合:长度固定的数据(MD5哈希、UUID、状态代码)

 VARCHAR适合:长度变化大的数据(用户名、地址、描述信息)

 

性能考虑:

 CHAR读取速度通常更快(固定长度)

 VARCHAR节省存储空间(特别是平均长度远小于最大长度时)

 

2. TEXT系列类型

 

层级关系:

TINYTEXT(255B) < TEXT(64KB) < MEDIUMTEXT(16MB) < LONGTEXT(4GB)

 

使用注意:

 TEXT列不能有默认值

 排序和分组只使用前1024字节(可配置)

 大量文本存储应考虑将文件存储在文件系统,数据库中只存路径

 

3. ENUM枚举类型

 

特性:

gender ENUM('male','female','other') NOT NULL

 内部存储为整数索引(比字符串更高效)

 排序按定义顺序而非字母顺序

 非法值会存储为空字符串(严格模式下报错)

 

优点:

 节省存储空间

 保证数据一致性

 提高查询效率

 

4. SET集合类型

 

特性:

permissions SET('read','write','execute','delete') DEFAULT 'read'

 可组合多个值(如'read,write')

 内部存储为位图(1个bit表示一个选项)

 最多64个选项

 

典型应用:

 权限系统

 多选项标签

 功能开关组合

 

字符编码重要说明

 

1.字符集影响:

    utf8mb4(推荐):4字节/字符,支持完整Unicode包括emoji

    utf8:3字节/字符(MySQL中的"utf8"是阉割版)

    latin1:1字节/字符

 

2. 存储计算:

    VARCHAR(255) utf8mb4列最大可能占用:255×4 + 1 = 1021字节

    实际行大小限制为65,535字节(所有列共享)

点赞(1)

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

Dotcpp在线编译      (登录可减少运行等待时间)