MySQL 数据类型


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

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

  • 《Spring AI 项目实战(问答机器人、RAG 智能客服、联网搜索)》已完结,基于 Spring AI + Spring Boot 3.x + JDK 21...查看介绍

  • 《从零手撸:仿小红书(微服务架构)》 已完结,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...查看介绍;演示链接:http://116.62.199.48:7070/

  • 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接:http://116.62.199.48/

  • 新开坑项目:《从零手撸:秒杀系统高并发优化实战》 正在更新中...,查看介绍

截止目前,星球内专栏累计输出 150w+ 字,讲解图 5110+ 张,还在持续爆肝中.. 后续还会上新更多项目,已有 4700+ 小伙伴加入学习,欢迎点击围观

在 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:适合存储较小的整数,例如布尔值或状态码。
  • INTBIGINT:适合较大数值的存储,如计数、金额等。

1.2 浮点类型与定点类型

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

2. 字符串类型

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

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

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 存储年
  • 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 类型的应用场景,有助于我们在实际项目中选择最优数据类型。合理设计数据库表结构不仅能节省存储空间,还能显著提升查询效率。