数据类型:选择合适的类型
数值类型
整数
| 类型 | 字节 | 范围 | 用途 |
|---|---|---|---|
| SMALLINT | 2 | -32768 ~ 32767 | 年龄、数量 |
| INT | 4 | -2^31 ~ 2^31-1 | 通用整数 |
| BIGINT | 8 | -2^63 ~ 2^63-1 | 大数值 |
sql
CREATE TABLE products (
id INT PRIMARY KEY,
stock SMALLINT,
views BIGINT
);自增主键
sql
-- PostgreSQL
id SERIAL PRIMARY KEY -- INT 自增
-- MySQL
id INT AUTO_INCREMENT PRIMARY KEY小数
sql
-- 精确小数(金额)
price DECIMAL(10, 2) -- 10 位数字,2 位小数
-- 浮点数(科学计算)
measurement FLOAT
measurement DOUBLE PRECISION字符串类型
CHAR vs VARCHAR
sql
-- CHAR:定长,不足填充空格
code CHAR(5) -- 'ABC '
-- VARCHAR:变长,节省空间
name VARCHAR(100) -- 'ABC'TEXT
sql
-- 长文本
description TEXT -- 无长度限制日期时间类型
sql
-- 日期
birth_date DATE -- '2000-01-15'
-- 时间
work_time TIME -- '09:30:00'
-- 日期时间
created_at TIMESTAMP -- '2026-01-15 09:30:00'
-- 带时区
created_at TIMESTAMPTZ -- PostgreSQL布尔类型
sql
is_active BOOLEAN -- TRUE / FALSE / NULLJSON 类型
sql
-- PostgreSQL
metadata JSONB -- 二进制 JSON,支持索引
-- MySQL
metadata JSON数组类型(PostgreSQL)
sql
tags TEXT[] -- 字符串数组
CREATE TABLE articles (
id INT,
tags TEXT[]
);
INSERT INTO articles VALUES (1, ARRAY['sql', 'database']);数据类型选择建议
| 场景 | 推荐类型 | 原因 |
|---|---|---|
| 主键 | INT/BIGINT SERIAL | 自增,高效 |
| 金额 | DECIMAL(10,2) | 精确 |
| 邮箱 | VARCHAR(255) | 变长 |
| 状态 | VARCHAR(20) 或 ENUM | 节省空间 |
| 文章内容 | TEXT | 无长度限制 |
| 创建时间 | TIMESTAMP | 精确到秒 |
练习
- 创建表使用不同数值类型
- 对比 CHAR 和 VARCHAR
- 使用 DECIMAL 存储金额
- 使用 TIMESTAMP 存储时间
- 使用 JSONB 存储元数据(PostgreSQL)
- 使用数组类型(PostgreSQL)
- 选择合适的数据类型设计用户表
- 选择合适的数据类型设计订单表
完成练习后,打开本章答案页核对。
下一步
下一节学习约束:如何使用约束保证数据完整性。