数据类型概览
合适的数据类型不仅能节省磁盘空间,还能提升数据查询和操作的效率,甚至避免因数据越界、精度丢失带来的业务问题。
数值类型
数值类型是 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 表示真。
在 MySQL 中,整型可以指定是有符号和无符号的,默认是有符号的可以通过 UNSIGNED 来说明某个字段是无符号的。如果不在合法的数据范围,会发生直接拦截,不允许进行数据的插入,一定程度上约束了用户对数据的插入。从另外一个方面来看,如果数据成功的插入的表格中,这个数据一定是合法的。对于类型的选择,一般视情况而论,比方说,年龄不会出现负数,我们就可以使用 unsigned 类型。
Bit 类型
基本语法:
![截图:Bit 类型基本语法示例]
显示规则特殊:BIT 字段查询时,会按照 ASCII 码对应的值显示,而非直接显示数字。例如插入 65,会显示字符 'A';精准控制存储位数:适合存储仅 0/1 的状态值(如性别:0 - 女,1 - 男),定义为 BIT(1) 可最大限度节省空间;越界会报错:插入的值超过 M 位表示的范围,会触发 Data too long 错误。
bit 字段在显示的时候,是按照 ASCII 码对应的值显示。上面的 2 插入失败的原因是,越界了,定义 online 的类型是 bit(1);如果想要显示出 0/1 可以使用查询的方式打开,以 16 进制的方式显示出来。
使用合适的数据类型,不但可以满足应用场景,还可以节省资源。
浮点型与定点型
当需要存储带小数的数值(如金额、薪资、身高)时,需使用浮点型(FLOAT/DOUBLE)或定点型(DECIMAL),二者的核心区别是精度不同,浮点型存在精度丢失,定点型则精准存储。
Float
语法:
![截图:Float 类型语法示例]
FLOAT:占用 4 字节,精度约 7 位,语法 FLOAT[(M,D)] [UNSIGNED];DOUBLE:占用 8 字节,精度比 FLOAT 更高,语法 ;其中 M 表示显示长度(整数 + 小数的总位数),D 表示小数位数,MySQL 会对插入的值进行四舍五入处理。核心特性: 表示总长度 4 位、小数 2 位,有符号范围为 ,无符号范围为 ;若插入值的小数位超过 D,会自动四舍五入,若整体超过 M 则越界报错。


