在 MySQL 中有六大常见的数据类型(Data Types),即存储数据的不同格式和类别。MySQL 的常用数据类型可归纳为以下六种主要形态(分类),每种形态包含具体的子类型,适用于不同的场景:
用于存储整数(无小数部分的数字),根据取值范围和存储空间分为不同子类型,适合存储计数、ID 等场景。
常用子类型:TINYINT(1 字节,范围 - 128-127 或 0~255)、SMALLINT(2 字节)、MEDIUMINT(3 字节)、INT(4 字节,最常用)、BIGINT(8 字节,适用于大数值如自增 ID)。
用于存储带小数的数字,区分 “近似值” 和 “精确值”。
浮点型(近似值):FLOAT(单精度,4 字节)、DOUBLE(双精度,8 字节),适合存储科学计算等对精度要求不极致的场景(可能有精度误差)。
定点型(精确值):DECIMAL(M,D)(M 为总位数,D 为小数位数),适合存储金额、汇率等需精确计算的场景(无精度损失)。
用于存储文本、字符序列等,根据长度和存储方式分为不同类型。
定长字符串:CHAR(N)(固定长度 N,不足补空格,适合短文本如手机号、密码哈希)。
变长字符串:VARCHAR(N)(长度可变,按实际内容存储,适合长度不固定的文本如用户名、描述)。
长文本 / 二进制:TEXT(长文本,如文章内容)、BLOB(二进制数据,如图片、文件)。
在 MySQL 的字符串类型中,除了存储字符数据的CHAR、VARCHAR、TEXT等,还包含专门用于存储二进制数据的BLOB类型(Binary Large Object)。它们同属字符串类型体系,因为本质上都是存储字节序列,只是BLOB针对二进制数据(无字符集概念),而其他字符串类型针对字符数据(依赖字符集编码)。
字符串类型中的BLOB子类型
BLOB用于存储二进制数据(如图片、音频、视频、文件等字节流),根据存储容量分为以下子类型:
| 类型 | 存储上限 | 适用场景 |
|---|---|---|
| TINYBLOB | 最大 255 字节 | 小图标、缩略图、短二进制数据 |
| BLOB | 最大 65,535 字节(64KB) | 小型图片(如头像)、短文件 |
| MEDIUMBLOB | 最大 16,777,215 字节(16MB) | 中等大小图片、文档(如 PDF) |
| LONGBLOB | 最大 4,294,967,295 字节(4GB) | 大型文件、高清图片、视频片段等 |
二进制安全:存储原始字节流,不依赖字符集编码(与TEXT的核心区别,TEXT会受字符集影响)。
存储效率:按实际数据长度存储(类似VARCHAR的变长特性),不浪费空间。
使用限制:
不适合作为索引列(会严重影响查询性能)。
大文件(如超过 100MB)不建议直接存储,会导致数据库体积膨胀、备份缓慢、读写性能下降。
BLOB:存储二进制数据(如010101字节流),无字符集,适合图片、文件等。
TEXT:存储字符数据(如"abc123"),依赖字符集(如utf8mb4),适合长文本(如文章内容)。
实际使用建议
小文件(如头像、图标,<1MB)可考虑BLOB存储,方便与业务数据关联。
大文件(如视频、高清图片)建议存储在文件系统(如服务器硬盘、云存储 OSS),仅在数据库中保存文件路径(用VARCHAR存储路径字符串),既能减轻数据库压力,又能提高访问效率。
用于存储日期、时间或 datetime 组合,精确到秒或微秒。
常用类型:DATE(仅日期,格式YYYY-MM-DD)、TIME(仅时间,HH:MM
用于存储预定义的离散值,节省空间且限制输入范围。
ENUM:单选枚举,只能从预定义列表中选一个值(如ENUM('男','女','未知'))。
SET:多选集合,可从预定义列表中选多个值(如SET('足球','篮球','羽毛球'))。
针对特定场景设计的类型,如 JSON、空间数据等。
JSON:存储 JSON 格式数据,支持快速解析和查询(适合半结构化数据)。
空间类型:如GEOMETRY、POINT、POLYGON等,用于存储地理空间数据(如经纬度、区域范围)。
本文作者:haotian
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!