MySQL 数据类型之字符串、数字、日期详解

 更新时间:2025年04月18日 11:15:26   作者:秋秋爱编码  
MySQL 提供了多种数据类型,每种类型都有其适用场景,合理选择数据类型可以提升存储效率、优化查询性能,并避免精度损失,这篇文章主要介绍了MySQL数据类型详解:字符串、数字、日期,需要的朋友可以参考下

MySQL 数据类型详解:字符串、数字、日期

在 MySQL 中,选择合适的数据类型对于数据库的存储效率查询性能至关重要。MySQL 提供了**字符串(String)、数字(Numeric)和日期(Date & Time)**三大类数据类型,每种类型又有不同的子类型,以适应不同的业务需求。

1. 字符串(String)数据类型

字符串类型用于存储文本数据,主要分为定长(CHAR)变长(VARCHAR),以及大文本(TEXT 和 BLOB)

1.1 定长与变长字符串

数据类型存储方式特点适用场景
CHAR(n)定长存储(不足补空格)访问速度快,占用空间固定适用于固定长度的数据,如国家代码、身份证号
VARCHAR(n)变长存储(按需分配空间)节省存储空间,但查询时可能需要额外的存储开销适用于长度不固定的文本,如用户昵称、电子邮件

CHAR vs. VARCHAR

  • CHAR(10) 始终占用 10 个字节(不足补空格)。
  • VARCHAR(10) 只存储实际字符,最多 10 个字节,并额外占用 1-2 字节用于存储长度信息。

一般来说:

  • 短小、长度固定的文本(如国家代码、MD5 哈希)用 CHAR
  • 长度不固定的文本(如姓名、地址)用 VARCHAR

1.2 TEXT 和 BLOB

当存储较长的文本或二进制数据时,使用 TEXT 和 BLOB 类型:

数据类型最大存储大小是否区分大小写适用场景
TINYTEXT255 字节✅ 区分大小写短文本,如推文内容
TEXT65,535 字节(64KB)✅ 区分大小写文章内容、评论
MEDIUMTEXT16,777,215 字节(16MB)✅ 区分大小写书籍、日志记录
LONGTEXT4GB✅ 区分大小写超长文本,如百科条目
TINYBLOB255 字节❌ 不区分大小写小二进制数据,如图片缩略图
BLOB64KB❌ 不区分大小写图片、音频
MEDIUMBLOB16MB❌ 不区分大小写大型媒体文件
LONGBLOB4GB❌ 不区分大小写超大文件,如电影

TEXT vs. VARCHAR

  • TEXT 不支持 默认值,也无法使用 索引(仅支持前缀索引),但可以存储大量文本。
  • VARCHAR 可以索引整个字段,适用于需要频繁搜索的文本字段。

2. 数字(Numeric)数据类型

数字类型用于存储整数或小数,主要分为整数类型浮点/定点类型

2.1 整数类型

数据类型存储大小取值范围(无符号)适用场景
TINYINT1 字节0 ~ 255布尔值(0/1)、评分
SMALLINT2 字节0 ~ 65,535小范围数值,如年龄
MEDIUMINT3 字节0 ~ 16,777,215适用于 ID、自增字段
INT(INTEGER)4 字节0 ~ 4,294,967,295适用于大部分场景,如用户 ID
BIGINT8 字节0 ~ 18,446,744,073,709,551,615适用于超大数值,如银行账户余额

无符号(UNSIGNED) vs. 有符号

  • TEXT 不支持 默认值,也无法使用 索引(仅支持前缀索引),但可以存储大量文本。
  • VARCHAR 可以索引整个字段,适用于需要频繁搜索的文本字段。

2. 数字(Numeric)数据类型

数字类型用于存储整数或小数,主要分为整数类型浮点/定点类型

2.1 整数类型

数据类型存储大小取值范围(无符号)适用场景
TINYINT1 字节0 ~ 255布尔值(0/1)、评分
SMALLINT2 字节0 ~ 65,535小范围数值,如年龄
MEDIUMINT3 字节0 ~ 16,777,215适用于 ID、自增字段
INT(INTEGER)4 字节0 ~ 4,294,967,295适用于大部分场景,如用户 ID
BIGINT8 字节0 ~ 18,446,744,073,709,551,615适用于超大数值,如银行账户余额

无符号(UNSIGNED) vs. 有符号

  • 默认情况下整数是有符号的(即支持负数)。
  • UNSIGNED 关键字可以使整数仅存储非负数,从而扩大可用范围。
CREATE TABLE users (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY
);

2.2 浮点与定点类型

数据类型存储大小适用场景
FLOAT(M, D)4 字节适用于非严格精度的计算,如游戏评分
DOUBLE(M, D)8 字节高精度计算,如科学计算
DECIMAL(M, D)(NUMERIC)可变财务计算,避免精度丢失

FLOAT vs. DECIMAL

FLOAT/DOUBLE 使用二进制存储,可能导致精度误差:

SELECT 0.1 + 0.2; -- 结果可能不是 0.3

DECIMAL 采用字符串存储,不会丢失精度:

CREATE TABLE transactions (
    amount DECIMAL(10,2) NOT NULL
);

建议:

  • 财务类数据使用 DECIMAL,避免计算误差。
  • 非关键计算(如统计数据)可使用 FLOATDOUBLE

3. 日期与时间(Date & Time)

MySQL 提供多个日期时间类型:

数据类型存储大小适用场景
FLOAT(M, D)4 字节适用于非严格精度的计算,如游戏评分
DOUBLE(M, D)8 字节高精度计算,如科学计算
DECIMAL(M, D)(NUMERIC)可变财务计算,避免精度丢失

DATETIME vs. TIMESTAMP

  • TIMESTAMP 受时区影响,适合存储事件发生时间。
  • DATETIME 不受时区影响,适合存储固定时间。
CREATE TABLE events (
    event_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

4. 选择数据类型的最佳实践

  • 能用整数就不要用字符串(如性别可用 TINYINT)。
  • 存储金额、财务数据时,使用 DECIMAL 而非 FLOAT
  • 短文本(<255 字符)用 VARCHAR,长文本用 TEXT
  • 索引字段尽量避免 TEXTBLOB,影响查询性能。
  • 时间戳数据尽量使用 TIMESTAMP 代替 DATETIME,节省存储空间。

总结

MySQL 提供了多种数据类型,每种类型都有其适用场景。合理选择数据类型可以提升存储效率、优化查询性能,并避免精度损失。希望这篇文章能帮助你在数据库设计时做出更好的选择!🚀

到此这篇关于MySQL 数据类型详解:字符串、数字、日期的文章就介绍到这了,更多相关mysql数据类型内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • mysql重复索引与冗余索引实例分析

    mysql重复索引与冗余索引实例分析

    这篇文章主要介绍了mysql重复索引与冗余索引,简单说明了重复索引与冗余索引的概念、应用场景并结合实例形式分析了mysql重复索引与冗余索引相关操作技巧,需要的朋友可以参考下
    2019-07-07
  • docker拉取MySQL8.0镜像以及安装的完整步骤

    docker拉取MySQL8.0镜像以及安装的完整步骤

    这篇文章主要介绍了如何在Docker中安装和配置MySQL镜像,包括数据挂载、配置文件设置、环境变量配置以及DBeaver数据库连接的常见问题解决方法,需要的朋友可以参考下
    2025-02-02
  • MySQL函数sysdate()与now()的区别测试用例对比

    MySQL函数sysdate()与now()的区别测试用例对比

    这篇文章主要为大家介绍了MySQL函数sysdate()与now()的区别测试用例对比详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12
  • MySQL bit类型增加索引后查询结果不正确案例解析

    MySQL bit类型增加索引后查询结果不正确案例解析

    这篇文章主要介绍了MySQL bit类型增加索引后查询结果不正确案例浅析,我们先创建表student_attend,初始化一些数据,这篇文章的测试环境为MySQL 8.0.35社区版,具体内容介绍跟随小编一起学习吧
    2024-06-06
  • 关于MySQL中的查询开销查看方法详解

    关于MySQL中的查询开销查看方法详解

    一个查询通常可以有很多种执行方式,并且返回同样的结果,而好的程序员应该是找到最好的方式,下面这篇文章主要给大家介绍了关于MySQL中查询开销查看方法的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2018-07-07
  • MySQL的DELETE删除数据示例详解

    MySQL的DELETE删除数据示例详解

    MySQL的DELETE语句用于从数据库表中删除记录,本文将详细介绍DELETE语句的基本语法、高级用法、性能优化策略以及注意事项,感兴趣的朋友跟随小编一起看看吧
    2024-12-12
  • 关于clickhouse几种create table的情况

    关于clickhouse几种create table的情况

    这篇文章主要介绍了关于clickhouse几种create table的情况,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • mysql 行转列和列转行实例详解

    mysql 行转列和列转行实例详解

    这篇文章主要介绍了mysql 行转列和列转行实例详解的相关资料,需要的朋友可以参考下
    2017-03-03
  • mysql 基本操作

    mysql 基本操作

    早打算写些关于数据库操作方面的知识了,现在终于完成了第一篇,以下记录了关于mysql操作方面的基础知识
    2012-08-08
  • MySQL InnoDB中意向锁的作用及原理

    MySQL InnoDB中意向锁的作用及原理

    意向锁是由InnoDB在操作数据之前自动加的,本文主要介绍了MySQL InnoDB中意向锁的作用及原理,具有一定的参考价值,感兴趣的可以了解一下
    2024-05-05

最新评论