MySQL 数据类型详解与实战指南
在数据库设计中,合理选择数据类型是构建高性能系统的基础。不同的数据类型直接影响存储空间、查询效率以及数据精度。本文将深入解析 MySQL 中的核心数据类型,并通过实际示例说明其特性与注意事项。
一、数值类型
MySQL 的数值类型主要分为整数和浮点数两大类。理解它们的取值范围和存储机制,能有效避免溢出或精度丢失问题。
1.1 TinyInt 类型
TINYINT 是最小的整数类型,占用 1 个字节。默认情况下,它是有符号的,取值范围为 -128 到 127。
CREATE TABLE test_tinyint (
num TINYINT
);
插入范围外的值会被拦截:
INSERT INTO test_tinyint VALUES (128); -- 报错:超出范围
通过添加 UNSIGNED 属性,可以消除负数限制,将范围扩展至 0 到 255:
CREATE TABLE test_unsigned (
num TINYINT UNSIGNED
);
其他 INT 类型(如 SMALLINT, MEDIUMINT, INT, BIGINT)遵循类似的逻辑,只是位数不同,最大支持 64 位整数。
1.2 Bit 类型
BIT 类型用于存储二进制位数据。定义时需指定位数 M,默认为 1。
CREATE TABLE test_bit (
a BIT(8)
);
注意: BIT 字段在查询结果中通常以 ASCII 码形式显示。例如插入十进制 65,可能显示为大写字母 'A'。若需查看原始数值,建议使用 CAST() 函数转换。
二、小数类型
处理金额或高精度计算时,小数类型的选择至关重要。
2.1 Float 类型
FLOAT 是单精度浮点数,存储时存在精度损失风险。定义时通常包含 M(总位数)和 D(小数位数)。
CREATE TABLE test_float (
salary FLOAT(4, 2)
);
当插入的数据超出指定范围或精度时,MySQL 会进行四舍五入处理。例如,插入 99.995 可能会变为 100.00,若超过上限则报错。同样支持 UNSIGNED 修饰符,仅允许非负数。
2.2 Decimal 类型
DECIMAL 是定点数类型,适合对精度要求极高的场景(如财务数据)。它与 FLOAT 类似,但不会发生精度丢失。
CREATE TABLE test_decimal (
val DECIMAL(, )
);


