MySQL 数据类型

一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

  • 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...点击查看项目介绍
  • 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/

截止目前, 星球 内专栏累计输出 66w+ 字,讲解图 2896+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2300+ 小伙伴加入学习 ,欢迎点击围观

在 MySQL 中,数据类型决定了数据在数据库中的存储方式和可执行的操作。合理选择数据类型不仅可以有效利用存储空间,还能提升查询性能。本小节中,将介绍 MySQL 中常用的数据类型,包括它们的特点、使用场景以及选择数据类型时的注意事项。

1. 数值类型

数值类型用于存储数值数据,根据数值的大小和精度,数值类型可分为整数类型和浮点类型。

1.1 整数类型

数据类型字节数范围(有符号)范围(无符号)
TINYINT1-128 到 1270 到 255
SMALLINT2-32,768 到 32,7670 到 65,535
MEDIUMINT3-8,388,608 到 8,388,6070 到 16,777,215
INT4-2,147,483,648 到 2,147,483,6470 到 4,294,967,295
BIGINT8-9,223,372,036,854,775,808 到 9,223,372,036,854,775,8070 到 18,446,744,073,709,551,615
  • TINYINT:适合存储较小的整数,例如布尔值或状态码。
  • INTBIGINT:适合较大数值的存储,如计数、金额等。

1.2 浮点类型与定点类型

数据类型字节数描述
FLOAT4单精度浮点数
DOUBLE8双精度浮点数
DECIMAL(m, d)可变定点数,精确存储
  • FLOATDOUBLE:适合对精度要求不高的科学计算和分析。
  • DECIMAL:适合精度要求高的场景,如货币计算。

2. 字符串类型

字符串类型用于存储文本数据,根据字符长度和内容,MySQL 提供了多种字符串类型。

数据类型字节数描述
CHAR(n)n 字节固定长度字符串,适合短文本
VARCHAR(n)1 + 实际字符长度可变长度字符串,适合长文本
TEXT实际字符长度大文本数据,最大 64KB
BLOB实际字符长度二进制大对象,最大 64KB
  • CHAR:适合固定长度的短字符串,如性别、国家代码。
  • VARCHAR:适合变长字符串,如用户名、电子邮件地址。
  • TEXTBLOB:适合较大文本或二进制数据,如文章内容或图像数据。

3. 日期和时间类型

日期和时间类型用于存储日期和时间信息,MySQL 提供了灵活的时间数据类型。

数据类型字节数范围描述
DATE31000-01-01 到 9999-12-31存储日期(年-月-日)
TIME3-838:59:59 到 838:59:59存储时间(时:分:秒)
DATETIME81000-01-01 00:00:00 到 9999-12-31 23:59:59存储日期和时间
TIMESTAMP41970-01-01 00:00:00 到 2038-01-19 03:14:07 UTC存储日期和时间,适合时间戳
YEAR11901 到 2155存储年
  • DATEDATETIME:适合存储日期和完整的日期时间信息。
  • 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 类型的应用场景,有助于我们在实际项目中选择最优数据类型。合理设计数据库表结构不仅能节省存储空间,还能显著提升查询效率。