Skip to content
MySQL 建模与查询优化 · 第 1 篇 / 共 6 篇
领域数据与中间件
专题MySQL 专题
当前序列MySQL 建模与查询优化
阅读位置第 1 篇 / 共 6 篇当前专题第 1 个序列 / 共 7 个序列

MySQL 字段类型怎么选:整数、小数、字符类型的常见取舍

数据库设计里,字段类型看起来像很基础的东西,但很多后续问题其实都和它有关:

  • 存储空间浪费
  • 精度丢失
  • 可读性差
  • 兼容性和维护成本增加

所以建表时把类型选对,远比事后修修补补轻松得多。

一、整数类型怎么选

MySQL 常见整数类型包括:

  • TINYINT
  • SMALLINT
  • MEDIUMINT
  • INT
  • BIGINT

选择时最实用的原则不是“越大越安全”,而是:

在能满足业务范围的前提下,尽量选择合适的最小类型。

因为字段越大:

  • 占用存储越多
  • 索引体积也会更大
  • 大表下会影响整体存储和查询成本

一个容易误解的点:int(11) 不是“11 位整数”

很多旧资料或者老项目里经常能看到:

sql
id int(11)

这里的 11 并不是表示这个字段能存 11 位数字,而是曾经和显示宽度有关。它不会改变 INT 本身的存储范围。

在现代 MySQL 版本里,这个概念已经没什么实际意义,也不应该再拿它当“长度”理解。

二、小数类型怎么选

常见小数类型主要有:

  • FLOAT
  • DOUBLE
  • DECIMAL

什么时候用 DECIMAL

如果字段涉及:

  • 金额
  • 计费
  • 结算
  • 需要精确比较的小数

优先考虑 DECIMAL

因为 FLOATDOUBLE 是浮点数,可能会有精度误差。

这也是原始笔记里“money 必须用 decimal”这条提醒最有价值的部分。

什么时候可以用 FLOATDOUBLE

如果是:

  • 统计值
  • 科学计算
  • 对极小误差容忍度较高的业务

才考虑使用浮点类型。

三、字符类型怎么选

最常见的比较通常是:

  • CHAR
  • VARCHAR

CHAR

特点:

  • 定长
  • 更适合长度稳定、变化不大的字段

例如:

  • 国家代码
  • 固定长度状态码
  • 某些短标识位

VARCHAR

特点:

  • 变长
  • 更灵活
  • 通常更节省空间

适合绝大多数普通字符串字段,例如:

  • 用户名
  • 标题
  • 描述
  • URL

一个实用判断

如果你不能明确证明这个字段“天然就是固定长度”,那默认先考虑 VARCHAR

四、CHARVARCHAR 到底怎么选

你原笔记里提到:

  • varchar 更灵活、省空间
  • char 有时处理更直接

这个方向是对的。

更实用的记法是:

  • 长度固定、变化极小:优先 CHAR
  • 长度不固定、业务文本字段:优先 VARCHAR

不要为了“理论上快一点”就到处用 CHAR,大部分业务表里,VARCHAR 才是更常见的默认选择。

五、一个更接近实际建表的建议

真正设计字段时,建议你优先问自己这几个问题:

  1. 这个值的范围有多大?
  2. 这个字段是否需要精确计算?
  3. 这个字符串长度是否稳定?
  4. 它是否会成为索引字段?

这些问题想清楚以后,再选字段类型,通常会比直接背类型表更有用。

一句话总结

字段类型选择的核心不是死记硬背,而是根据“范围、精度、长度是否固定、是否参与索引”这几个维度做判断。

如果只记最实用的几条:

  • 整数能小就别大
  • 金额别用浮点数
  • 大多数文本优先 VARCHAR
  • 别再把 int(11) 当成长度了
延伸阅读相关文章优先当前专题,再补跨专题关联。
同一序列 · 顺着当前主线继续读MySQL 索引设计与慢 SQL 排查适合先把字段设计、索引、Explain、分页和慢 SQL 这条主线走顺。MySQL 专题 · MySQL 建模与查询优化同一序列 · 顺着当前主线继续读MySQL Explain 实战适合先把字段设计、索引、Explain、分页和慢 SQL 这条主线走顺。MySQL 专题 · MySQL 建模与查询优化同专题其他序列 · 共享标签:选型对比半同步复制和异步复制怎么选适合把 next-key lock、一致性读、复制延迟和分库分表边界放回同一条一致性主线上判断。MySQL 专题 · MySQL 事务、锁与高可用边界同专题其他序列 · 共享标签:选型对比join 驱动表怎么选更合理适合把建模方式、联合索引、回表和 join 执行策略放在同一条查询优化主线上理解。MySQL 专题 · MySQL 建模与查询执行路径跨专题关联 · 同场景:方案选型分词器、Tokenizer 和 IK 到底怎么选适合把分词、复杂查询和深分页放到一起深入看。Elasticsearch 专题 · Elasticsearch 查询与分析细节跨专题关联 · 同场景:方案选型工厂模式怎么选适合把设计模式、对象创建和结构抽象能力放在一组里系统理解。架构与设计专题 · 设计模式与结构抽象
继续阅读MySQL 建模与查询优化当前序列第 1 篇 / 共 6 篇当前专题第 1 个序列 / 共 7 个序列
往前看
上一序列设计模式与结构抽象从第 1 篇开始:设计模式总览
往后看
下一篇MySQL 索引设计与慢 SQL 排查继续当前序列下一章下一序列MySQL 事务、锁与高可用从第 1 篇开始:MySQL 事务与锁

把零散经验整理成可查、可复用、可持续更新的企业级知识门户