MySQL 常用数据类型
一、数值类型
1. 整数类型
| 数据类型 | 范围(有符号) | 无符号范围 | 存储空间 | 示例场景 |
|---|---|---|---|---|
TINYINT |
-128 ~ 127 | 0 ~ 255 | 1字节 | 年龄、状态码(如0/1) |
SMALLINT |
-32768 ~ 32767 | 0 ~ 65535 | 2字节 | 小规模计数(如班级人数) |
MEDIUMINT |
-8388608 ~ 8388607 | 0 ~ 16777215 | 3字节 | 中等范围ID |
INT (INTEGER) |
-2147483648 ~ 2147483647 | 0 ~ 4294967295 | 4字节 | 用户ID、订单号 |
BIGINT |
-2^63 ~ 2^63-1 | 0 ~ 2^64-1 | 8字节 | 大型系统的主键、时间戳 |
注意:
- 若字段不需要负数,可加
UNSIGNED关键字扩大范围(如INT UNSIGNED)。 - 主键推荐用
INT或BIGINT(结合AUTO_INCREMENT)。
2. 浮点与精确小数
| 数据类型 | 说明 | 示例场景 |
|---|---|---|
FLOAT(M,D) |
单精度浮点数,M是总位数,D是小数位 | 科学测量(可接受近似值) |
DOUBLE(M,D) |
双精度浮点数,精度更高 | 高精度科学计算 |
DECIMAL(M,D) |
精确小数,M是总位数,D是小数位 | 金额、需要精确计算的场景 |
示例:
1 | -- 金额字段(精确到分) |
二、字符串类型
1. 短文本
| 数据类型 | 说明 | 示例场景 |
|---|---|---|
CHAR(n) |
定长字符串,最多255字符 | 固定长度(如国家代码) |
VARCHAR(n) |
变长字符串,最多65535字符 | 姓名、地址等可变长度 |
区别:
CHAR(10):存储 “abc” 时占用10字节(补空格)。VARCHAR(10):存储 “abc” 时占用3字节 + 长度信息。
2. 长文本
| 数据类型 | 说明 |
|---|---|
TEXT |
存储长文本(如文章内容),最大65KB |
MEDIUMTEXT |
最大16MB |
LONGTEXT |
最大4GB |
3. 二进制数据
| 数据类型 | 说明 |
|---|---|
BLOB |
存储二进制数据(如图片、文件) |
LONGBLOB |
最大4GB |
三、日期与时间类型
| 数据类型 | 格式 | 示例场景 |
|---|---|---|
DATE |
YYYY-MM-DD | 生日、订单日期 |
TIME |
HH:MM:SS | 会议时间 |
DATETIME |
YYYY-MM-DD HH:MM:SS | 订单创建时间(带时分秒) |
TIMESTAMP |
时间戳(1970-01-01至今的秒数) | 自动记录修改时间 |
YEAR |
YYYY | 毕业年份 |
区别:
DATETIME:范围1000-01-01 到 9999-12-31,手动插入或更新。TIMESTAMP:范围1970-01-01 到 2038-01-19,自动时区转换。
四、其他类型
| 数据类型 | 说明 | 示例场景 |
|---|---|---|
ENUM('val1', 'val2') |
枚举类型,只能选列表中的值 | 性别(’男’,’女’) |
SET('a','b','c') |
集合类型,可选多个值 | 用户兴趣标签 |
BOOLEAN |
别名是 TINYINT(1),0为假,非0为真 |
是否启用(TRUE/FALSE) |
五、如何选择数据类型?
- 最小化原则:选择能满足需求的最小类型(如年龄用
TINYINT而非INT)。 - 精确性:金额用
DECIMAL,避免浮点误差。 - 可读性:日期用
DATE/DATETIME,而非字符串。 - 性能优化:
- 频繁查询的字段避免用
TEXT/BLOB。 - 定长字段(如MD5哈希值)用
CHAR。
- 频繁查询的字段避免用
六、示例建表语句
1 | CREATE TABLE products ( |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Moziの个人博客!
评论
