
在数据库设计中,列的数据类型选择直接决定了存储效率、查询性能以及数据的一致性。虽然库和表的操作是基础,但理解每种类型的底层机制才是构建高性能系统的关键。
MySQL 的数据类型主要分为数值型、字符串型、日期时间型以及枚举集合型。下面我们将逐一拆解这些类型的特性与选型建议。
一、数值类型
数值类型涵盖了从整数到浮点数的各种场景。其中 int 家族最为常见,而 tinyint 和 bit 则有其特定的应用场景。
1.1 Tinyint 类型
tinyint 占用 1 个字节,有符号范围是 -128 到 127。如果加上 unsigned 属性,范围则变为 0 到 255。
CREATE TABLE test_tinyint (num TINYINT);
INSERT INTO test_tinyint VALUES (-128, 127, 0);
当插入超出范围的数值时,MySQL 会直接拦截并报错。对于无符号类型:
CREATE TABLE test_unsigned (num TINYINT UNSIGNED);
INSERT INTO test_unsigned VALUES (0, 255);
超出 255 的值同样无法插入。除了 tinyint,其他 int 类型(如 smallint, mediumint, bigint)的用法类似,只是存储空间和取值范围不同。在实际开发中,如果字段值确定在一个小范围内(如状态码),优先使用 tinyint 以节省空间。
1.2 Bit 类型
bit 类型用于存储二进制位数据。定义时需要指定位数 M,默认值为 1。
CREATE TABLE test_bit (a BIT(8));
INSERT INTO test_bit VALUES (10);
这里有一个细节需要注意:bit 字段在显示时通常按 ASCII 码对应的字符输出,而不是直接显示十进制数值。例如插入 65 可能显示为 'A'。如果需要查看原始数值,可以使用 CAST() 函数转换。此外,bit 类型同样受位数限制,超出最大值会被拦截。
1.3 Float 与 Decimal
处理小数时,float 和 decimal 是最常见的选择,两者的核心区别在于精度。
Float 类型 是浮点数类型,支持参数 M 和 d。它存在精度损失问题,适合对精度要求不高的场景。


