MySQL 数据类型概览
MySQL 的数据类型定义了表中每一列可存储的数据格式,直接影响存储效率、计算精度和查询性能。合理选择数据类型是数据库设计的关键步骤。以下分类详解常见类型及其应用场景。
一、数值类型:精确与近似的平衡
整数类型
- 用途:存储无小数的整数值(如ID、状态码)。
- 子类型(按范围升序):
TINYINT
:1字节,范围 -128~127(有符号)或 0~255(无符号)。SMALLINT
:2字节,范围 -32,768~32,767(有符号)。INT
:4字节,范围 -21亿~21亿(有符号),适用于主键、计数器。BIGINT
:8字节,支持超大整数(如金融交易ID)。
- 关键属性:
UNSIGNED
:禁止负数,扩大正数范围。AUTO_INCREMENT
:自动生成唯一递增值,常用于主键。
浮点数与定点数
FLOAT
:单精度浮点,4字节,约7位有效数字,适用科学计算但存在精度损失。DOUBLE
:双精度浮点,8字节,约15位有效数字,精度优于FLOAT
。DECIMAL
:精确小数,以字符串形式存储,适合货币计算(如DECIMAL(10,2)
表示整数8位+小数2位)。- 对比:
- 精度要求高 →
DECIMAL
; - 存储空间敏感 →
FLOAT/DOUBLE
。
- 精度要求高 →
二、字符串类型:灵活存储文本与二进制
文本字符串
CHAR(n)
:定长字符串(1~255字符),存储时填充空格,检索速度快,适合固定长度数据(如性别CHAR(1)
)。VARCHAR(n)
:变长字符串(最多65,535字符),按实际长度存储,节省空间,适合长度波动大的数据(如用户名、地址)。TEXT
系列:TINYTEXT
(255字符)、TEXT
(64KB)、MEDIUMTEXT
(16MB)、LONGTEXT
(4GB),用于大段文本(如文章内容),不支持默认值。
二进制字符串
BINARY(n)
/VARBINARY(n)
:类似CHAR
/VARCHAR
,但存储二进制数据(如图片哈希值)。BLOB
系列:存储大型二进制文件(如图片、视频),分TINYBLOB
、BLOB
、MEDIUMBLOB
、LONGBLOB
。
枚举与集合
ENUM
:单选预定义值(如ENUM('男','女')
),内部以整数存储,节省空间。SET
:多选预定义值(如SET('音乐','阅读')
),支持组合存储。
三、日期与时间类型:精准记录时刻
类型 | 格式 | 大小 | 典型场景 |
---|---|---|---|
DATE | YYYY-MM-DD | 3字节 | 生日、签约日期 |
TIME | HH:MM:SS | 3字节 | 营业时间、持续时间 |
DATETIME | YYYY-MM-DD HH:MM:SS | 8字节 | 订单时间、日志时间 |
TIMESTAMP | YYYY-MM-DD HH:MM:SS | 4字节 | 自动更新时间戳(如updated_at ) |
- 关键区别:
TIMESTAMP
受时区影响,范围较小(1970~2038);DATETIME
范围更大(1000~9999年)。
四、特殊类型:扩展应用场景
- JSON类型:MySQL 5.7+支持,直接存储并验证JSON文档,支持路径查询(如
WHERE data->>'$.name' = 'John'
)。 - 空间类型:如
GEOMETRY
、POINT
,用于地理信息系统(GIS)。