Appearance
MySQL 字段类型怎么选:整数、小数、字符类型的常见取舍
数据库设计里,字段类型看起来像很基础的东西,但很多后续问题其实都和它有关:
- 存储空间浪费
- 精度丢失
- 可读性差
- 兼容性和维护成本增加
所以建表时把类型选对,远比事后修修补补轻松得多。
一、整数类型怎么选
MySQL 常见整数类型包括:
TINYINTSMALLINTMEDIUMINTINTBIGINT
选择时最实用的原则不是“越大越安全”,而是:
在能满足业务范围的前提下,尽量选择合适的最小类型。
因为字段越大:
- 占用存储越多
- 索引体积也会更大
- 大表下会影响整体存储和查询成本
一个容易误解的点:int(11) 不是“11 位整数”
很多旧资料或者老项目里经常能看到:
sql
id int(11)这里的 11 并不是表示这个字段能存 11 位数字,而是曾经和显示宽度有关。它不会改变 INT 本身的存储范围。
在现代 MySQL 版本里,这个概念已经没什么实际意义,也不应该再拿它当“长度”理解。
二、小数类型怎么选
常见小数类型主要有:
FLOATDOUBLEDECIMAL
什么时候用 DECIMAL
如果字段涉及:
- 金额
- 计费
- 结算
- 需要精确比较的小数
优先考虑 DECIMAL。
因为 FLOAT 和 DOUBLE 是浮点数,可能会有精度误差。
这也是原始笔记里“money 必须用 decimal”这条提醒最有价值的部分。
什么时候可以用 FLOAT 或 DOUBLE
如果是:
- 统计值
- 科学计算
- 对极小误差容忍度较高的业务
才考虑使用浮点类型。
三、字符类型怎么选
最常见的比较通常是:
CHARVARCHAR
CHAR
特点:
- 定长
- 更适合长度稳定、变化不大的字段
例如:
- 国家代码
- 固定长度状态码
- 某些短标识位
VARCHAR
特点:
- 变长
- 更灵活
- 通常更节省空间
适合绝大多数普通字符串字段,例如:
- 用户名
- 标题
- 描述
- URL
一个实用判断
如果你不能明确证明这个字段“天然就是固定长度”,那默认先考虑 VARCHAR。
四、CHAR 和 VARCHAR 到底怎么选
你原笔记里提到:
varchar更灵活、省空间char有时处理更直接
这个方向是对的。
更实用的记法是:
- 长度固定、变化极小:优先
CHAR - 长度不固定、业务文本字段:优先
VARCHAR
不要为了“理论上快一点”就到处用 CHAR,大部分业务表里,VARCHAR 才是更常见的默认选择。
五、一个更接近实际建表的建议
真正设计字段时,建议你优先问自己这几个问题:
- 这个值的范围有多大?
- 这个字段是否需要精确计算?
- 这个字符串长度是否稳定?
- 它是否会成为索引字段?
这些问题想清楚以后,再选字段类型,通常会比直接背类型表更有用。
一句话总结
字段类型选择的核心不是死记硬背,而是根据“范围、精度、长度是否固定、是否参与索引”这几个维度做判断。
如果只记最实用的几条:
- 整数能小就别大
- 金额别用浮点数
- 大多数文本优先
VARCHAR - 别再把
int(11)当成长度了