主要分三类:数值类型、字符串类型、日期时间类型。
| 类型 | 大小 | 有符号范围 | 说明 |
|---|
| TINYINT | 1 byte | -128 ~ 127 | 小整数;加 UNSIGNED → 0 ~ 255(如年龄) |
| SMALLINT | 2 bytes | -32768 ~ 32767 | |
| MEDIUMINT | 3 bytes | -8388608 ~ 8388607 | |
| INT / INTEGER | 4 bytes | -2147483648 ~ 2147483647 | 最常用 |
| BIGINT | 8 bytes | -2^63 ~ 2^63-1 | 极大整数 |
| FLOAT | 4 bytes | 单精度(约 7 位有效数字) | 不精确 |
| DOUBLE | 8 bytes | 双精度(约 15 位有效数字) | 不精确 |
| DECIMAL(M, D) | 由 M(精度)、D(标度) 决定 | 精确定点数 | 金额等需精确的场景 |
| 类型 | 大小(bytes) | 说明 |
|---|
| CHAR | 0-255 | 定长,如 CHAR(1) 存性别、CHAR(18) 存身份证 |
| VARCHAR | 0-65535 | 变长,最常用,如 VARCHAR(10) 存姓名 |
| TINYTEXT / TEXT / MEDIUMTEXT / LONGTEXT | 255 / 65 535 / 16 777 215 / 4 294 967 295 | 文本,容量依次递增 |
| TINYBLOB / BLOB / MEDIUMBLOB / LONGBLOB | 同上 | 二进制数据(BLOB 存字节,TEXT 存文本) |
| 类型 | 大小 | 格式 | 范围 | 说明 |
|---|
| DATE | 3 | YYYY-MM-DD | 1000-01-01 ~ 9999-12-31 | 日期 |
| TIME | 3 | HH:MM:SS | -838:59:59 ~ 838:59:59 | 时间或持续时间 |
| YEAR | 1 | YYYY | 1901 ~ 2155 | 年份 |
| DATETIME | 8 | YYYY-MM-DD HH:MM:SS | 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 | 日期 + 时间 |
| TIMESTAMP | 4 | YYYY-MM-DD HH:MM:SS | 1970-01-01 00:00:01 ~ 2038-01-19 03:14:07 | 时间戳,注意 2038 上限 |
- 整数:范围小用
TINYINT,常用 INT,超大用 BIGINT;非负加 UNSIGNED。 - 小数:要精确(金额)用
DECIMAL,普通浮点用 FLOAT / DOUBLE。 - 字符串:定长用
CHAR,变长用 VARCHAR;长文本 TEXT,二进制 BLOB。 - 时间:只要日期用
DATE,只要时间用 TIME,两者都要用 DATETIME;TIMESTAMP 只占 4 字节但上限到 2038-01-19。
版本差异:CHAR/VARCHAR 的长度在 MySQL 8 中指字符数(5.7 指字节数)。