🧠 MySQL 数据类型大全 + 表结构设计规范
📘 一、MySQL 数据类型分类总览
MySQL 中的数据类型主要分为以下几大类:
类型类别 |
示例 |
常见用途 |
数值类型 |
INT , FLOAT , DECIMAL |
存储数字、金额、计数 |
字符串类型 |
CHAR , VARCHAR , TEXT |
存储文字、描述、备注 |
日期时间类型 |
DATE , TIME , DATETIME , TIMESTAMP |
存储日期、时间信息 |
布尔类型 |
BOOLEAN , TINYINT(1) |
存储真假(0 或 1) |
二进制类型 |
BLOB , VARBINARY |
存储图片、文件等二进制数据 |
JSON 类型 |
JSON |
存储结构化或嵌套数据 |
🔢 二、数值类型详解
类型 |
字节 |
取值范围(有符号) |
示例 |
说明 |
TINYINT |
1 |
-128 ~ 127 |
TINYINT(1) |
常用于布尔值(0/1) |
SMALLINT |
2 |
-32,768 ~ 32,767 |
SMALLINT |
小范围整数 |
MEDIUMINT |
3 |
-8,388,608 ~ 8,388,607 |
|
较少使用 |
INT |
4 |
-2,147,483,648 ~ 2,147,483,647 |
INT AUTO_INCREMENT |
常用于主键 |
BIGINT |
8 |
超大整数 |
|
常用于ID或统计数 |
FLOAT |
4 |
小数点后约7位精度 |
FLOAT(10,2) |
不建议用于金额 |
DOUBLE |
8 |
小数点后约15位精度 |
|
高精度计算 |
DECIMAL(M,D) |
可变 |
精确小数 |
DECIMAL(10,2) |
用于金额、财务 |
🧩 示例:
CREATE TABLE orders (
id INT PRIMARY KEY AUTO_INCREMENT,
total_price DECIMAL(10,2) NOT NULL,
discount_rate FLOAT(4,2) DEFAULT 0.0
);
🔤 三、字符串类型详解
类型 |
最大长度 |
示例 |
特点 |
CHAR(n) |
固定 n 字节 |
CHAR(10) |
定长,速度快但浪费空间 |
VARCHAR(n) |
可变长度 |
VARCHAR(255) |
节省空间,推荐使用 |
TEXT |
65,535 字节 |
|
存储大段文字 |
MEDIUMTEXT |
16 MB |
|
长文本,如日志 |
LONGTEXT |
4 GB |
|
超大文本,如文档内容 |
🧩 示例:
CREATE TABLE users (
username VARCHAR(50) NOT NULL,
bio TEXT
);
🕒 四、日期与时间类型
类型 |
示例值 |
说明 |
DATE |
'2025-10-16' |
仅日期 |
TIME |
'15:30:00' |
仅时间 |
DATETIME |
'2025-10-16 15:30:00' |
常用于业务记录 |
TIMESTAMP |
'2025-10-16 07:30:00' |
自动记录时间,可用于更新时间 |
YEAR |
'2025' |
仅年份 |
🧩 示例:
CREATE TABLE events (
id INT PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(100),
start_time DATETIME,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
🧮 五、布尔与枚举类型
类型 |
示例 |
说明 |
BOOLEAN |
TRUE / FALSE |
实际为 TINYINT(1) |
ENUM |
ENUM('male','female','other') |
性别、状态等有限值 |
SET |
SET('a','b','c') |
可多选的字符串集合 |
🧩 示例:
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
gender ENUM('male','female','other') DEFAULT 'other',
active BOOLEAN DEFAULT TRUE
);
🧱 六、JSON 与二进制类型
类型 |
示例 |
用途 |
JSON |
'{"key": "value"}' |
存储结构化数据 |
BLOB |
二进制大对象 |
存图片、文件 |
VARBINARY(n) |
二进制字符串 |
通常用于哈希或加密值 |
🧩 示例:
CREATE TABLE configs (
id INT AUTO_INCREMENT PRIMARY KEY,
settings JSON,
file_hash VARBINARY(64)
);
⚙️ 七、表结构设计规范
1. 命名规范
项目 |
规范示例 |
数据库名 |
小写+下划线,如 company_db |
表名 |
小写+复数,如 users , orders |
字段名 |
小写+下划线,如 user_id , created_at |
主键 |
一般命名为 id |
外键 |
user_id , order_id |
索引 |
idx_字段名 |
唯一索引 |
uniq_字段名 |
2. 字段设计建议
3. 主键与索引设计
类型 |
推荐策略 |
主键 |
使用自增 INT 或 BIGINT |
外键 |
若性能要求高,可逻辑约束代替外键约束 |
索引 |
经常用于 WHERE 的字段添加索引 |
唯一索引 |
防止重复数据,如 email |
🧩 示例:
CREATE TABLE orders (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
order_no VARCHAR(50) UNIQUE,
total_price DECIMAL(10,2) NOT NULL,
status TINYINT DEFAULT 0,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
INDEX idx_user_id (user_id)
);
🧩 八、实战建表示例
CREATE TABLE employees (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100) NOT NULL,
gender ENUM('male','female','other') DEFAULT 'other',
age TINYINT UNSIGNED,
hire_date DATE,
salary DECIMAL(10,2) DEFAULT 0.00,
department_id INT,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
INDEX idx_dept_id (department_id),
FOREIGN KEY (department_id) REFERENCES departments(id)
);
✅ 九、总结
主题 |
要点 |
类型选择 |
优先用最小可满足需求的类型 |
字符串 |
VARCHAR 优于 CHAR |
金额 |
用 DECIMAL 避免浮点误差 |
时间 |
DATETIME + TIMESTAMP 自动更新时间 |
规范 |
小写命名,逻辑清晰,字段含义明确 |
🧠 建议:
定期复盘数据库设计,确保字段命名一致性、索引合理性、类型匹配性。
优秀的数据库结构 = 性能 + 可维护性。