开发者

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

目录
  • 前言
  • 1. 字符串(String)数据类型
    • 1.1 定长与变长字符串
      • CHAR vs. VARCHAR
    • 1.2 TEXT 和 BLOB
      • TEXT vs. VARCHAR
  • 2. 数字(Numeric)数据类型
    • 2.1 整数类型
      • 2.2 浮点与定点类型
        • FLOAT vs. DECIMAL
      • 3. 日期与时间(Date & Time)
        • DATETIME vs. TIMESTAMP
      • 4. 选择数据类型的最佳实践
      • 总结

        前言

        在 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
        • 长度不固定的文本(如姓php名、地址)用 VARCHAR

        1.2 TEXT 和 BLOB

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

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

        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. 有符号

        • 默认情况下整数是有符号的(即支持负数)。
        • 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,避免计算误差。
        • 非关键计算(如统计数据)可使用 FLOAT 或 DOUBLE

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

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

        数据类型存储大小取值范围适用场景
        DATjsE3 字节1000-01-01 ~ 9999-12-31生日、订单日期
        DATETIME8 字节1000-01-01 00:00:00 ~ 9999-12-31 23:59:59需要精确到秒的时间,如创建时间
        TIMESTAMP4 字节1970-01-01 00:00:01 ~ 2038-01-19 03:14:07适用于存储 Unix 时间戳
        TIME3 字节-838:59:59 ~ 838:59:59记录时间间隔
        YEAR1 字节1901 ~ 2155适用于年份数据

        DATETIME vs. TIMESTAMP

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

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

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

        总结

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

        到此这篇关于MySQL数据类型之字符串、数字、日期的文章就介绍到这了,更多相关MySQL字符串、数字、日期内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!

        0

        上一篇:

        下一篇:

        精彩评论

        暂无评论...
        验证码 换一张
        取 消

        最新数据库

        数据库排行榜