字符串类型分类与比较
类型 | 描述 | 最大长度 | 存储方式 | 特点 |
---|---|---|---|---|
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字节(所有列共享)
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程