Skip to content

MySQL 数据类型概览

MySQL 的数据类型定义了表中每一列可存储的数据格式,直接影响存储效率、计算精度和查询性能。合理选择数据类型是数据库设计的关键步骤。以下分类详解常见类型及其应用场景。

一、数值类型:精确与近似的平衡

  1. 整数类型

    • 用途:存储无小数的整数值(如ID、状态码)。
    • 子类型(按范围升序):
      • TINYINT:1字节,范围 -128~127(有符号)或 0~255(无符号)。
      • SMALLINT:2字节,范围 -32,768~32,767(有符号)。
      • INT:4字节,范围 -21亿~21亿(有符号),适用于主键、计数器。
      • BIGINT:8字节,支持超大整数(如金融交易ID)。
    • 关键属性
      • UNSIGNED:禁止负数,扩大正数范围。
      • AUTO_INCREMENT:自动生成唯一递增值,常用于主键。
  2. 浮点数与定点数

    • FLOAT:单精度浮点,4字节,约7位有效数字,适用科学计算但存在精度损失。
    • DOUBLE:双精度浮点,8字节,约15位有效数字,精度优于FLOAT
    • DECIMAL:精确小数,以字符串形式存储,适合货币计算(如 DECIMAL(10,2) 表示整数8位+小数2位)。
    • 对比
      • 精度要求高 → DECIMAL
      • 存储空间敏感 → FLOAT/DOUBLE

二、字符串类型:灵活存储文本与二进制

  1. 文本字符串

    • CHAR(n):定长字符串(1~255字符),存储时填充空格,检索速度快,适合固定长度数据(如性别CHAR(1))。
    • VARCHAR(n):变长字符串(最多65,535字符),按实际长度存储,节省空间,适合长度波动大的数据(如用户名、地址)。
    • TEXT系列
      • TINYTEXT(255字符)、TEXT(64KB)、MEDIUMTEXT(16MB)、LONGTEXT(4GB),用于大段文本(如文章内容),不支持默认值
  2. 二进制字符串

    • BINARY(n)/VARBINARY(n):类似CHAR/VARCHAR,但存储二进制数据(如图片哈希值)。
    • BLOB系列:存储大型二进制文件(如图片、视频),分TINYBLOBBLOBMEDIUMBLOBLONGBLOB
  3. 枚举与集合

    • ENUM:单选预定义值(如ENUM('男','女')),内部以整数存储,节省空间。
    • SET:多选预定义值(如SET('音乐','阅读')),支持组合存储。

三、日期与时间类型:精准记录时刻

类型格式大小典型场景
DATEYYYY-MM-DD3字节生日、签约日期
TIMEHH:MM:SS3字节营业时间、持续时间
DATETIMEYYYY-MM-DD HH:MM:SS8字节订单时间、日志时间
TIMESTAMPYYYY-MM-DD HH:MM:SS4字节自动更新时间戳(如updated_at
  • 关键区别
    • TIMESTAMP 受时区影响,范围较小(1970~2038);
    • DATETIME 范围更大(1000~9999年)。

四、特殊类型:扩展应用场景

  • JSON类型:MySQL 5.7+支持,直接存储并验证JSON文档,支持路径查询(如WHERE data->>'$.name' = 'John')。
  • 空间类型:如GEOMETRYPOINT,用于地理信息系统(GIS)。