数据库数据类型

1966 字
10 分钟
数据库数据类型

数值类型#

分为整数类型、定点数类型、浮点数类型、位类型,核心用于存储数字数据。

整数类型(最常用,主键 / 状态 / 数量首选)#

类型字节数有符号取值范围无符号 (unsigned) 取值范围典型适用场景
TINYINT1-128 ~ 1270 ~ 255状态码、性别、布尔值、年龄
SMALLINT2-32768 ~ 327670 ~ 65535小范围数量、分类 ID
MEDIUMINT3-8388608 ~ 83886070 ~ 16777215中等规模数据 ID、访问量统计
INT/INTEGER4-2147483648 ~ 21474836470 ~ 4294967295表主键、常规业务 ID、数量统计
BIGINT8-9223372036854775808 ~ 92233720368547758070 ~ 18446744073709551615超大主键、雪花 ID、分布式业务 ID

关键避坑:MySQL 8.0 已废弃INT(11)这类显示宽度设置,它不影响数值的存储范围,仅为旧版本兼容语法。BOOLEAN/BOOL是TINYINT(1)的别名,0 代表 false,非 0 代表 true,无原生布尔类型。


定点数类型(精准数值,金额首选)#

类型字节数核心特性适用场景
DECIMAL(M,D) / NUMERIC(M,D)动态(M+2 字节左右)精准十进制存储,无精度丢失;M = 总有效位数 (1-65),D = 小数位数 (0-30,≤M)金额、汇率、精准计量数据

示例:DECIMAL(10,2) 表示总位数 10 位,小数 2 位,取值范围-99999999.99 ~ 99999999.99,是电商订单金额的标准选型。

强制规范:所有金融 / 金额类字段必须用 DECIMAL,绝对禁止用浮点数。


浮点数类型(近似数值,非精准场景用)#

类型字节数精度特性适用场景
FLOAT4单精度,约 6-7 位有效数字科学计算、非精准的浮点数据
DOUBLE8双精度,约 15-17 位有效数字非精准的大数据量浮点统计、地理坐标

避坑:浮点数是二进制近似存储,会出现0.1 + 0.2 ≠ 0.3的精度丢失问题,严禁用于金额、对账等精准校验场景。


位类型#

类型字节数特性适用场景
BIT(M)1-8 字节(M 为 1-64)存储位字段,M 为位数,默认 1 位,取值 0/1多状态位掩码、布尔开关

字符串类型#

最常用的类型之一,分为常规文本字符串、二进制字符串、枚举 / 集合三大类,核心用于存储文本、二进制数据。

常规文本字符串(核心高频)#

类型最大长度(字符)存储特性适用场景
CHAR(M)0-255定长字符串,不足 M 位自动补空格,查询效率高固定长度内容:手机号、身份证号、性别编码、UUID
VARCHAR(M)0-65535(受行大小限制)变长字符串,存储实际内容 + 1/2 字节长度前缀,节省空间非固定长度内容:用户名、地址、商品名称、短备注
TINYTEXT255短文本,无默认值,不支持普通索引前缀极短的扩展字段、临时备注
TEXT65535中等文本,无默认值,行溢出存储文章摘要、评论内容、长备注
MEDIUMTEXT16777215长文本,无默认值文章正文、协议内容、长文本日志
LONGTEXT4294967295超长文本,无默认值超大文本、JSON 大对象、备份内容
  1. 字符集强制使用utf8mb4,支持完整 UTF-8 字符(含 emoji),避免utf8(别名utf8mb3,仅支持 3 字节,无法存储 emoji)。
  2. VARCHAR(M)的 M 是字符数,不是字节数:utf8mb4 下 1 个字符最多占 4 字节,MySQL 单行最大容量为 65535 字节,因此 VARCHAR 实际最大可用字符数约 16000 左右。
  3. 优先用VARCHAR,仅当内容长度固定时用CHAR,查询速度 char 大于 varchar;短文本优先 VARCHAR,避免滥用 TEXT 类型(TEXT 会触发行溢出,查询性能远低于 VARCHAR)。

3个字节用以记录字段大小。不区分是否为中文还是字母。


二进制字符串类型#

存储二进制字节流,无字符集概念,大小写敏感,适合存储非文本数据。

类型最大长度对应文本类型适用场景
BINARY(M)0-255 字节CHAR(M)固定长度二进制:哈希值、加密串、校验码
VARBINARY(M)0-65535 字节VARCHAR(M)变长二进制:动态加密数据、二进制令牌
TINYBLOB255 字节TINYTEXT极短二进制文件片段
BLOB65535 字节TEXT中等二进制数据:小图片、小文件
MEDIUMBLOB16777215 字节MEDIUMTEXT较大二进制文件:图片、音频片段
LONGBLOB4294967295 字节LONGTEXT超大二进制文件:视频、备份包

不推荐在数据库中直接存储大文件(图片 / 视频),建议存文件路径 / 对象存储 URL,仅特殊涉密场景用 BLOB。


枚举与集合类型#

类型核心特性最大选项数适用场景
ENUM单选枚举,只能选预定义的一个值,底层用数字存储,节省空间65535固定单选选项:性别、订单状态、审核状态
SET多选集合,可选择预定义的多个值,底层用位掩码存储64固定多选选项:用户标签、爱好、权限标识
  • ENUM:ENUM(‘待付款’,‘待发货’,‘已发货’,‘已完成’)
  • SET:SET(‘篮球’,‘足球’,‘羽毛球’,‘游泳’)

避坑:ENUM/SET 的选项修改需要执行ALTER TABLE,高并发场景慎用;ENUM 的数值索引容易混淆(如ENUM(‘a’,‘b’)中,where status=1匹配 ‘a’,where status=‘1’匹配值为 ‘1’ 的选项)。


日期与时间类型#

MySQL 8.0 优化了日期类型的存储,核心用于存储时间数据,优先推荐DATETIME。

类型字节数格式取值范围核心特性适用场景
DATE3YYYY-MM-DD1000-01-01 ~ 9999-12-31仅存日期,无时间生日、入职日期、业务日期
TIME3HH:MM.fraction-838:59:59 ~ 838:59:59仅存时间 / 时长,支持微秒精度(0-6 位)营业时间、时长统计、时分秒数据
DATETIME(M)5YYYY-MM-DD HH:MM.fraction1000-01-01 00:00:00 ~ 9999-12-31 23:59:59不受时区影响,支持微秒精度,支持默认值 / 自动更新【首选】创建时间、更新时间、业务发生时间
TIMESTAMP(M)4YYYY-MM-DD HH:MM.fraction1970-01-01 00:00:01 UTC ~ 2038-01-19 03:14:07 UTC受会话时区影响,自动转换时区,有 2038 年上限问题跨时区业务、需要自动时区转换的场景
YEAR1YYYY1901 ~ 2155仅存年份,占用空间极小出生年份、发行年份、统计年份
  1. 90% 以上场景优先使用DATETIME(3)(毫秒精度),无 2038 问题,不受时区干扰,MySQL 8.0 支持DEFAULT CURRENT_TIMESTAMP和ON UPDATE CURRENT_TIMESTAMP,完全覆盖 TIMESTAMP 的功能。
  2. 禁止用字符串类型存储日期时间,会丧失日期函数、索引优化能力,且占用更多空间。

原生特殊类型#

  1. JSON 类型(MySQL 5.7+ 支持,8.0 大幅优化)

    • 核心特性:原生 JSON 格式存储,自动校验 JSON 格式合法性,支持 JSON 专属函数、索引(通过生成列创建),比 TEXT 存 JSON 性能提升显著。
    • 最大容量:等同于 LONGTEXT,最大约 4GB。
    • 适用场景:动态扩展字段、不固定结构的配置数据、前端透传的结构化数据、多维度标签,避免频繁 ALTER TABLE 加字段。
    • 示例:JSON类型字段,存储{“id”:1,“name”:“张三”,“tags”:[“VIP”,“新用户”]}
  2. 空间数据类型

    • 用于存储地理空间数据,支持空间索引,适配 LBS、地图类业务,核心类型:
    • POINT:点坐标(经纬度)
    • LINESTRING:线、路径
    • POLYGON:多边形、区域
    • GEOMETRY:通用空间类型,可存储上述任意类型

关于数据类型选择的指南#

  1. 主键选型:单表自增主键用INT UNSIGNED,超大规模 / 分布式表用BIGINT UNSIGNED,禁止用 VARCHAR 作为主键。
  2. 金额存储:强制用DECIMAL(M,D),绝对禁止 FLOAT/DOUBLE。
  3. 字符串选型:优先VARCHAR,固定长度用CHAR,字符集统一utf8mb4,短文本禁用 TEXT。
  4. 时间选型:优先DATETIME(3),非必要不用 TIMESTAMP,避免 2038 问题。
  5. 状态枚举:少量固定选项用TINYINT(代码映射枚举),固定不变的单选可用 ENUM,高并发场景优先 TINYINT。
  6. 动态字段:非结构化 / 动态扩展字段用JSON类型,替代传统的键值对表或多冗余字段。

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或赞助支持!

赞助
数据库数据类型
https://umami.eu.cc/posts/database-datatype/
作者
迷失的天际
发布于
2026-04-09
许可协议
CC BY-NC-SA 4.0

评论区

Profile Image of the Author
迷失的天际
趁现在,享受短暂的人生吧!
公告
欢迎来到我的博客!
音乐
封面

音乐

暂未播放

0:00 0:00
暂无歌词
分类
标签
站点统计
文章
32
分类
8
标签
37
总字数
76,162
运行时长
0 天
最后活动
0 天前

目录