• 设为首页
  • 收藏本站
  • 积分充值
  • VIP赞助
  • 手机版
  • 微博
  • 微信
    微信公众号 添加方式:
    1:搜索微信号(888888
    2:扫描左侧二维码
  • 快捷导航
    福建二哥 门户 查看主题

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

    发布者: 福建二哥 | 发布时间: 2025-6-14 14:27| 查看数: 136| 评论数: 0|帖子模式

    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 哈希)用
      1. CHAR
      复制代码

    • 长度不固定的文本(如姓名、地址)用
      1. VARCHAR
      复制代码


    1.2 TEXT 和 BLOB

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

      1. TEXT
      复制代码
      不支持 默认值,也无法使用 索引(仅支持前缀索引),但可以存储大量文本。
      1. 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适用于大部分场景,如用户 IDBIGINT8 字节0 ~ 18,446,744,073,709,551,615适用于超大数值,如银行账户余额无符号(UNSIGNED) vs. 有符号

      1. TEXT
      复制代码
      不支持 默认值,也无法使用 索引(仅支持前缀索引),但可以存储大量文本。
      1. 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适用于大部分场景,如用户 IDBIGINT8 字节0 ~ 18,446,744,073,709,551,615适用于超大数值,如银行账户余额无符号(UNSIGNED) vs. 有符号

    • 默认情况下整数是有符号的(即支持负数)。
      1. UNSIGNED
      复制代码
      关键字可以使整数仅存储非负数,从而扩大可用范围。
    1. CREATE TABLE users (
    2.     id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY
    3. );
    复制代码
    2.2 浮点与定点类型

    数据类型存储大小适用场景FLOAT(M, D)4 字节适用于非严格精度的计算,如游戏评分DOUBLE(M, D)8 字节高精度计算,如科学计算DECIMAL(M, D)(NUMERIC)可变财务计算,避免精度丢失FLOAT vs. DECIMAL
    FLOAT/DOUBLE 使用二进制存储,可能导致精度误差:
    1. SELECT 0.1 + 0.2; -- 结果可能不是 0.3
    复制代码
    DECIMAL 采用字符串存储,不会丢失精度:
    1. CREATE TABLE transactions (
    2.     amount DECIMAL(10,2) NOT NULL
    3. );
    复制代码
    建议:

    • 财务类数据使用
      1. DECIMAL
      复制代码
      ,避免计算误差。
    • 非关键计算(如统计数据)可使用
      1. FLOAT
      复制代码
      1. DOUBLE
      复制代码


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

    MySQL 提供多个日期时间类型:
    数据类型存储大小适用场景FLOAT(M, D)4 字节适用于非严格精度的计算,如游戏评分DOUBLE(M, D)8 字节高精度计算,如科学计算DECIMAL(M, D)(NUMERIC)可变财务计算,避免精度丢失
    DATETIME vs. TIMESTAMP


    • TIMESTAMP 受时区影响,适合存储事件发生时间。
    • DATETIME 不受时区影响,适合存储固定时间。
    1. CREATE TABLE events (
    2.     event_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
    3. );
    复制代码
    4. 选择数据类型的最佳实践


    • 能用整数就不要用字符串(如性别可用
      1. TINYINT
      复制代码
      )。
    • 存储金额、财务数据时,使用
      1. DECIMAL
      复制代码
      而非
      1. FLOAT
      复制代码

    • 短文本(<255 字符)用
      1. VARCHAR
      复制代码
      ,长文本用
      1. TEXT
      复制代码

    • 索引字段尽量避免
      1. TEXT
      复制代码
      1. BLOB
      复制代码
      ,影响查询性能。
    • 时间戳数据尽量使用
      1. TIMESTAMP
      复制代码
      代替
      1. DATETIME
      复制代码
      ,节省存储空间。

    总结

    MySQL 提供了多种数据类型,每种类型都有其适用场景。合理选择数据类型可以提升存储效率、优化查询性能,并避免精度损失。希望这篇文章能帮助你在数据库设计时做出更好的选择!🚀
    到此这篇关于MySQL 数据类型详解:字符串、数字、日期的文章就介绍到这了,更多相关mysql数据类型内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    来源:https://www.jb51.net/database/3399001un.htm
    免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

    最新评论

    QQ Archiver 手机版 小黑屋 福建二哥 ( 闽ICP备2022004717号|闽公网安备35052402000345号 )

    Powered by Discuz! X3.5 © 2001-2023

    快速回复 返回顶部 返回列表