一、数据类型分类
合适的数据类型不仅能节省磁盘空间,还能提升数据查询和操作的效率,甚至避免因数据越界、精度丢失带来的业务问题。
二、数值类型
数值类型是 MySQL 中最常用的类型之一,用于存储整数、小数等数字数据,又可细分为整型、位类型、浮点型和定点型。整型支持有符号(SIGNED)和无符号(UNSIGNED)两种模式,默认是有符号,无符号类型仅能存储非负数。
整型的核心特点是占用字节固定,取值范围明确,越界插入会直接报错。MySQL 提供了 5 种整型,从 1 字节的 TINYINT 到 8 字节的 BIGINT,满足不同的数值存储需求,其详细参数如下表:
| 类型 | 占用字节 | 有符号范围 | 无符号范围 |
|---|---|---|---|
| TINYINT | 1 | -128 ~ 127 | 0 ~ 255 |
| SMALLINT | 2 | -32768 ~ 32767 | 0 ~ 65535 |
| MEDIUMINT | 3 | -8388608 ~ 8388607 | 0 ~ 16777215 |
| INT | 4 | -2147483648 ~ 2147483647 | 0 ~ 4294967295 |
| BIGINT | 8 | -9223372036854775808 ~ 9223372036854775807 | 0 ~ 18446744073709551615 |
- 越界会直接报错:有符号 TINYINT 插入 128、无符号 TINYINT 插入 -1,都会触发
Out of range错误,MySQL 不会自动转换值; - 慎用 UNSIGNED:官方建议尽量不使用无符号类型,若 INT 存储不下数据,INT UNSIGNED 也大概率存不下,直接将类型提升为 BIGINT 更稳妥;
- BOOL 本质是 TINYINT (1):MySQL 中没有真正的布尔类型,BOOL/BOOLEAN 是 TINYINT (1) 的别名,用 0 表示假,1 表示真。
2.1 tinyint 类型
在 MySQL 中,整型可以指定是有符号和无符号的,默认是有符号的可以通过 UNSIGNED 来说明某个字段是无符号的。以上的案例我们可以知道,如果不在合法的数据范围,会发生直接拦截,不允许进行数据的插入,一定程度上约束了用户对数据的插入。
从另外一个方面来看,如果数据成功的插入的表格中,这个数据一定是合法的(或者做过一些符合规范的数据处理,比方说后面所说的浮点数)。MySQL 能保证数据插入的合法性,就能数据库中的数据是可预期性的【数据访问已知】、完整的【没有发生半阶段和类型转化】。对于类型的选择,一般视情况而论,比方说,年龄不会出现负数,我们就可以使用 unsigned 类型。
2.2 bit 类型
基本语法:
显示规则特殊:BIT 字段查询时,会按照 ASCII 码对应的值显示,而非直接显示数字。例如插入 65,会显示字符 'A';精准控制存储位数:**适合存储仅 0/1 的状态值(如性别:0 - 女,1 - 男),定义为
BIT(1)可最大限度节省空间;**越界会报错:插入的值超过 M 位表示的范围,会触发Data too long错误。


