数据类型
根据需求,来定义具体的数据类型
- 数值类型
- 字符串类型
- 日期类型
- 二进制类型
- 布尔类型
- 枚举类型
| 类型分类 | 数据类型 | 描述 | 存储空间 | 场景 |
|---|---|---|---|---|
| 数值类型 | INT/INTEGER | 存储整数,范围通常为 -2^31 到 2^31-1 | 4 字节 | 用户年龄、订单数量 |
BIGINT | 更大范围的整数(-2^63 到 2^63-1) | 8 字节 | 唯一ID(如自增主键) | |
FLOAT | 单精度浮点数,近似数值 | 4 字节 | 科学计算、非精确小数 | |
DOUBLE | 双精度浮点数,精度高于 FLOAT | 8 字节 | 高精度科学计算 | |
DECIMAL/NUMERIC | 精确小数,适合金融计算(指定精度和小数位) | 可变(取决于精度) | 价格(如 DECIMAL(10,2) 表示 10位总长度,2位小数) | |
| 字符串类型 | CHAR(n) | 定长字符串,长度固定,不足补空格 | 固定为 n 字节(最大 255) | 国家代码(如 "CN"、"US") |
VARCHAR(n) | 变长字符串,按实际长度存储,需指定最大长度 | 实际长度 + 1-2 字节(最大 65535) | 用户名、地址 | |
TEXT | 长文本数据,无固定长度限制 | 可变(通常较大) | 文章内容、评论 | |
| 日期时间类型 | DATE | 仅存储日期(年-月-日) | 3 字节 | 出生日期、订单日期 |
TIME | 仅存储时间(时:分:秒) | 3 字节 | 会议开始时间 | |
DATETIME | 存储日期和时间(年-月-日 时:分:秒) | 8 字节 | 用户注册时间 | |
TIMESTAMP | 时间戳(与时区相关,自动更新) | 4 字节 | 记录修改时间 | |
| 二进制类型 | BLOB | 存储二进制大对象(如图片、音频) | 可变(最大 4GB) | 用户头像、文件上传 |
BINARY(n) | 定长二进制数据 | 固定为 n 字节 | 加密后的短二进制数据 | |
| 布尔类型 | BOOLEAN/BOOL | 存储逻辑值(TRUE/FALSE) | 1 字节 | 是否启用、订单是否完成 |
| JSON 类型 | JSON | 存储结构化 JSON 数据(现代数据库支持) | 可变 | API 响应数据、配置信息 |
| 枚举类型 | ENUM | 预定义字符串集合,字段值必须为其中之一 | (最多65535个值) | 状态字段、性别 |
存储数据注意
- 存储优化:尽量选择最小够用的类型(例如用
SMALLINT代替INT存储小范围数值)。 - 数据一致性:枚举类型可替代自由文本字段,减少输入错误
枚举类型理解
枚举类型(enum)是一种特殊的数据类型,用于存储预定义的字符串值列表
- 有限值约束:枚举字段的值必须是预定义的枚举值之一,这增强了数据一致性,减少了无效或非法值的输入。
- 存储高效:枚举类型使用内部索引代替字符串存储,节省了存储空间。
- 查询性能优越:与字符串类型相比,枚举类型的比较和排序更高效。
- 语义清晰:字段值的含义更加直观,提高了代码的可读性和可维护性
- 存储方式:枚举类型的数据存储为整数形式,每个枚举值对应一个整数值
枚举类型场景
枚举类型应用于需要固定状态或分类的场景,例如:
- 订单状态管理:如“待支付”、“已发货”、“已完成”等状态。
- 用户角色管理:如“管理员”、“普通用户”、“访客”等角色。
- 状态跟踪:如设备的“在线”、“离线”、“维护中”等状态。
枚举类型的局限性
- 灵活性差:枚举类型的值一旦定义后难以修改,可能导致数据不一致性。
- 排序问题:枚举类型的排序依赖于定义顺序,可能导致逻辑混乱