MySQL数值类型分整数、浮点数、定点数三类:整数按字节选型(TINYINT至BIGINT),浮点数(FLOAT/DOUBLE)有精度误差,金额等必须用DECIMAL(M,D)保证精确。

MySQL中的数值类型主要分为三类:整数类型、浮点数类型和定点数类型。选对类型不仅影响存储空间和查询效率,更直接关系到计算是否准确——尤其是金额、计数、状态等关键字段。
整数类型:按需选择字节大小
整数类型以字节为单位划分容量,支持有符号(默认)和无符号(UNSIGNED)两种模式,后者可将负数范围转为正数扩展:
- TINYINT(1字节):有符号 -128~127,无符号 0~255;适合性别、状态码、省份编码等小范围枚举值
- SMALLINT(2字节):-32768~32767 / 0~65535;可用于订单状态、评分等级
- MEDIUMINT(3字节):-8388608~8388607 / 0~16777215;中小规模ID或日活计数
- INT(4字节):-2147483648~2147483647 / 0~4294967295;通用主键、用户ID、访问量统计
- BIGINT(8字节):超大范围,推荐用于高并发系统中的自增主键(如电商订单号、消息ID),避免21亿上限瓶颈
注意:INT(11) 中的 11 仅影响显示宽度(如配合 ZEROFILL),不改变存储空间或取值范围。
浮点数类型:适合近似计算,慎用于金额
FLOAT 和 DOUBLE 采用二进制浮点表示,存在固有精度误差,适用于科学计算、日志指标等允许微小偏差的场景:
- FLOAT(4字节):单精度,约7位有效数字;一般不推荐在业务核心字段使用
- DOUBLE(8字节):双精度,约15位有效数字;比 FLOAT 更稳定,但仍非精确类型
例如:SELECT 0.1 + 0.2 = 0.3 在 FLOAT/DIMPLE 中可能返回 FALSE,因底层二进制无法精确表达十进制小数。
一、功能简介本软件完全适应大、中、小型网站建设需要,让您用很便宜的虚拟主机空间也可以开通4个独立的网站!久久企业网站后台管理系统各种版本开发基础架构均为php+mysql+div+css+伪静态,迎合搜索引擎排名的喜好。另外值得一提的是本站特色的TAG系统可为您的网站做出无限分类,不用任何设置全站ULR伪静态!本建站系统除了有产品发布、新闻(软文)发布、订单管理系统和留言反馈等一些最基本的功能之外
DECIMAL:金融与精确运算的唯一可靠选择
DECIMAL(M,D) 是定点数类型,以字符串方式存储,保证十进制精度:
- M 表示总位数(精度),D 表示小数位数;例如
DECIMAL(18,2)可存最大9999999999999999.99 - 存储空间随 M 和 D 增长而增加,但换来的是加减乘除零误差
- 所有涉及货币、余额、库存扣减、分账比例等必须用 DECIMAL,不可妥协
其他数值相关类型
还有几个易被忽略但实用的类型:
- BIT(M):存储位字段,M=1~64;适合权限掩码、开关集合(如用户角色位图)
-
BOOLEAN / BOOL:MySQL 的别名,实际映射为
TINYINT(1);建议显式写TINYINT(1) UNSIGNED并加注释说明用途 -
SERIAL:是
BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE的别名,常用于超大规模表主键
不复杂但容易忽略:整数溢出时 MySQL 默认截断并警告(SQL mode 非严格下),线上务必开启严格模式(STRICT_TRANS_TABLES)让越界操作直接报错。









