MySQL 数据类型核心指南:选型、实战与避坑
在数据库设计中,数据类型的选择直接决定了存储效率、查询性能和数据准确性。选对了能避免空间浪费和精度丢失,选错了可能导致系统隐患(比如用 INT 存手机号导致截断)。本文将拆解 MySQL 核心数据类型,结合实战测试讲解选型技巧。
一、MySQL 数据类型分类总览
MySQL 的数据类型丰富,按功能主要分为五大类:
| 分类 | 核心类型 | 适用场景 |
|---|---|---|
| 数值类型 | BIT, TINYINT, INT, BIGINT, FLOAT, DECIMAL | 数字存储(年龄、金额、计数) |
| 字符串类型 | CHAR, VARCHAR, TEXT, BLOB | 文本(姓名、地址、大文本、二进制) |
| 日期时间类型 | DATE, DATETIME, TIMESTAMP | 时间记录(生日、创建/修改时间) |
| 特殊字符串 | ENUM, SET | 固定选项(性别、状态、爱好) |
| 二进制类型 | BLOB | 图片、文件等二进制数据 |
二、数值类型:精准匹配范围与精度
数值类型最关注范围和精度,避免溢出或精度丢失。
2.1 整数类型
整数类型按占用字节分为几类,支持 UNSIGNED(无符号)修饰:
| 类型 | 占用字节 | 有符号范围 | 无符号范围 | 适用场景 |
|---|---|---|---|---|
| BIT(M) | 1-8 | 1-64 位 | 同有符号 | 0/1 标识、位掩码 |
| TINYINT | 1 | -128 ~ 127 | 0 ~ 255 | 年龄、状态值 |
| SMALLINT | 2 | -32768 ~ 32767 | 0 ~ 65535 | 小范围计数 |
| INT | 4 | -2e9 ~ 2e9 | 0 ~ 4e9 | 普通计数(用户 ID) |
| BIGINT | 8 | -9e18 ~ 9e18 | 0 ~ 1.8e19 | 大数值(手机号、雪花 ID) |
实战要点:
- 慎用 UNSIGNED:虽然能扩大正数范围,但插入负数会报错,且混合计算时容易出逻辑问题。建议直接用更大的整数类型替代。
- BIT 的坑:BIT 字段存储的是位数据,查询时默认按 ASCII 码显示(如 bit(8) 存 10 可能显示为换行符),仅适合简单标识。
测试示例
-- BIT 类型越界测试
CREATE TABLE tt5 (gender BIT(1));
INSERT INTO tt5 ();
tt5 ();
tt5 ();


