MySQL 数据类型
一则或许对你有用的小广告
欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论
- 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于
Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...
,点击查看项目介绍 - 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/
截止目前, 星球 内专栏累计输出 72w+ 字,讲解图 3103+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2400+ 小伙伴加入学习 ,欢迎点击围观
在 MySQL 中,数据类型决定了数据在数据库中的存储方式和可执行的操作。合理选择数据类型不仅可以有效利用存储空间,还能提升查询性能。本小节中,将介绍 MySQL 中常用的数据类型,包括它们的特点、使用场景以及选择数据类型时的注意事项。
1. 数值类型
数值类型用于存储数值数据,根据数值的大小和精度,数值类型可分为整数类型和浮点类型。
1.1 整数类型
数据类型 | 字节数 | 范围(有符号) | 范围(无符号) |
---|---|---|---|
TINYINT | 1 | -128 到 127 | 0 到 255 |
SMALLINT | 2 | -32,768 到 32,767 | 0 到 65,535 |
MEDIUMINT | 3 | -8,388,608 到 8,388,607 | 0 到 16,777,215 |
INT | 4 | -2,147,483,648 到 2,147,483,647 | 0 到 4,294,967,295 |
BIGINT | 8 | -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 | 0 到 18,446,744,073,709,551,615 |
- TINYINT:适合存储较小的整数,例如布尔值或状态码。
- INT 和 BIGINT:适合较大数值的存储,如计数、金额等。
1.2 浮点类型与定点类型
数据类型 | 字节数 | 描述 |
---|---|---|
FLOAT | 4 | 单精度浮点数 |
DOUBLE | 8 | 双精度浮点数 |
DECIMAL(m, d) | 可变 | 定点数,精确存储 |
- FLOAT 和 DOUBLE:适合对精度要求不高的科学计算和分析。
- DECIMAL:适合精度要求高的场景,如货币计算。
2. 字符串类型
字符串类型用于存储文本数据,根据字符长度和内容,MySQL 提供了多种字符串类型。
数据类型 | 字节数 | 描述 |
---|---|---|
CHAR(n) | n 字节 | 固定长度字符串,适合短文本 |
VARCHAR(n) | 1 + 实际字符长度 | 可变长度字符串,适合长文本 |
TEXT | 实际字符长度 | 大文本数据,最大 64KB |
BLOB | 实际字符长度 | 二进制大对象,最大 64KB |
- CHAR:适合固定长度的短字符串,如性别、国家代码。
- VARCHAR:适合变长字符串,如用户名、电子邮件地址。
- TEXT 和 BLOB:适合较大文本或二进制数据,如文章内容或图像数据。
3. 日期和时间类型
日期和时间类型用于存储日期和时间信息,MySQL 提供了灵活的时间数据类型。
数据类型 | 字节数 | 范围 | 描述 |
---|---|---|---|
DATE | 3 | 1000-01-01 到 9999-12-31 | 存储日期(年-月-日) |
TIME | 3 | -838:59:59 到 838:59:59 | 存储时间(时:分:秒) |
DATETIME | 8 | 1000-01-01 00:00:00 到 9999-12-31 23:59:59 | 存储日期和时间 |
TIMESTAMP | 4 | 1970-01-01 00:00:00 到 2038-01-19 03:14:07 UTC | 存储日期和时间,适合时间戳 |
YEAR | 1 | 1901 到 2155 | 存储年 |
- DATE 和 DATETIME:适合存储日期和完整的日期时间信息。
- TIMESTAMP:适合记录 Unix 时间戳。
- TIME:适合记录时间数据,如工时或时长。
4. JSON 类型
MySQL 5.7 及以上版本支持 JSON 数据类型,允许存储 JSON 格式的数据。JSON 类型字段可用于存储灵活的结构化数据,但要注意 JSON 类型的字段索引和查询性能较差,不宜用于复杂查询。
CREATE TABLE example_table (
data JSON
);
- 使用场景:适合存储结构变化频繁的数据,如动态配置或用户偏好。
5. ENUM 和 SET 类型
ENUM
ENUM
数据类型用于定义一组允许的值,例如状态或类型。创建 ENUM
列时指定所有可能值:
CREATE TABLE example_table (
status ENUM('active', 'inactive', 'pending')
);
SET
SET
数据类型用于定义多个可能值的组合,适合多选项字段。
CREATE TABLE example_table (
tags SET('sports', 'news', 'entertainment')
);
6. 选择数据类型的注意事项
- 空间效率:尽量选择占用空间少的数据类型,能用
TINYINT
就不选INT
。 - 性能考虑:使用合适的数据类型有助于提高查询和索引性能。
- 存储精度:财务数据用
DECIMAL
存储,避免浮点数精度误差。 - 拓展性:
VARCHAR
灵活适合变长字符,避免固定长度导致浪费空间。
小结
MySQL 数据类型的选择对数据库设计和性能有重要影响。理解数值、字符串、日期时间、JSON、ENUM 和 SET 类型的应用场景,有助于我们在实际项目中选择最优数据类型。合理设计数据库表结构不仅能节省存储空间,还能显著提升查询效率。