mysql中的数值类型有哪些_mysql数值类型基础说明

来源:这里教程网 时间:2026-02-28 20:31:21 作者:

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
,因底层二进制无法精确表达十进制小数。

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
)让越界操作直接报错。

相关推荐