MySQL 数据类型详解
在数据库设计中,合理选择数据类型是保障存储效率与查询性能的基础。不同的字段类型决定了底层如何分配空间以及如何验证数据。下面我们将深入探讨 MySQL 中常见的几类数据类型。
一、数值类型
数值类型主要用于存储整数和浮点数。其中 INT 系列最为常用。
1.1 TINYINT 类型
TINYINT 是最小的整型,默认占用 1 个字节。其有符号范围是 -128 到 127。如果加上 UNSIGNED 属性,则范围变为 0 到 255。
CREATE TABLE test_tinyint (
num TINYINT
);
测试插入边界值:
- 插入 127 和 -128 均成功。
- 若尝试插入 128 或 -129,MySQL 会直接拦截并报错,提示超出范围。
当使用 UNSIGNED 时:
CREATE TABLE test_unsigned (
num TINYINT UNSIGNED
);
此时只能存储 0 到 255 之间的正数,负数会被拒绝。
1.2 BIT 类型
BIT 类型用于存储位字段。定义时需指定位数 M,默认为 1。例如 BIT(8) 表示 8 位。
CREATE TABLE test_bit (
a BIT(8)
);
注意: BIT 字段在查询结果中通常不直接显示为十进制数字,而是按 ASCII 码对应的字符显示。例如插入 65(二进制 01000001),查询时会显示为字符 'A'。如果需要查看具体数值,建议转换为十进制格式。
二、小数类型
处理金额或高精度计算时,小数类型的选择至关重要。
2.1 FLOAT 类型
FLOAT 是单精度浮点数,定义时需要两个参数:M(总长度)和 D(小数位数)。例如 FLOAT(4,2) 表示总共 4 位,其中小数占 2 位,范围为 -99.99 到 99.99。
特性:
- 超出范围时会被截断或报错。
- 对于符合范围但精度不符的数据,MySQL 可能会进行四舍五入处理。
- 同样支持
UNSIGNED属性,限制为非负数。
2.2 DECIMAL 类型
DECIMAL 用于存储精确的小数值,适合金融场景。它与 FLOAT 类似,也接受 M 和 D 参数,但内部存储机制不同。
对比:
FLOAT存在精度损失,超过 7 位有效数字后可能出现误差。DECIMAL能保持完全精确,最大整数位 M 可达 65,小数位 D 最大 30。
示例:
CREATE TABLE test_decimal (
f_val FLOAT(10,2),
d_val DECIMAL(10,)
);


