数值类型要点
- TINYINT 只占 1 字节,存状态、开关、小计数最划算
- INT 是主键和计数的默认选择,有符号范围约正负 21 亿
- BIGINT 给订单号这类可能暴涨的 id,避免后期溢出
- FLOAT / DOUBLE 是近似值,算钱会出现分毫误差
- DECIMAL(M,D) 精确小数,金额必须用它,M 是总位 D 是小数位
- UNSIGNED 去掉负号把上限翻倍,计数场景常用
数值类型示例
CREATE TABLE product (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
stock SMALLINT UNSIGNED NOT NULL DEFAULT 0,
price DECIMAL(10,2) NOT NULL,
rating FLOAT
);
数值类型对照
| 类型 | 占用空间 | 有符号范围 | 无符号范围 | 适用场景 |
|---|---|---|---|---|
| TINYINT | 1 字节 | -128 到 127 | 0 到 255 | 状态标志、年龄 |
| SMALLINT | 2 字节 | -32768 到 32767 | 0 到 65535 | 端口、数量 |
| MEDIUMINT | 3 字节 | -8388608 到 8388607 | 0 到 16777215 | 中等计数 |
| INT | 4 字节 | 约正负 21 亿 | 0 到 42 亿 | 主键、计数 |
| BIGINT | 8 字节 | 极大整数 | 更大 | 订单号、海量 id |
| FLOAT | 4 字节 | 单精度浮点 | 同左 | 一般小数 |
| DOUBLE | 8 字节 | 双精度浮点 | 同左 | 高精度小数 |
| DECIMAL(M,D) | M+2 字节 | 精确小数 | 精确小数 | 金额 |
避坑提醒:金额字段用 FLOAT 会丢精度,0.1 加 0.2 都不等于 0.3,财务系统一律 DECIMAL。