前几篇博客我们学会了MySQL里面的数据库操作与表操作,今天我们将认识MySQL里面的数据类型,话不多说,我们现在开始啦~~
| 分类 | 数据类型 | 详细说明 |
|---|---|---|
| 数值类型 | BIT(M) | 位类型,M 指定位数,默认值 1,取值范围 1~64 |
| TINYINT [UNSIGNED] | 微小整数:有符号范围 -128~127,无符号范围 0~255,默认有符号 |
|
| BOOL | 布尔类型,本质用 0 表示假、1 表示真 |
|
| SMALLINT [UNSIGNED] | 小整数:有符号范围 -2¹⁵ ~ 2¹⁵-1,无符号范围 0 ~ 2¹⁶-1 |
|
| INT [UNSIGNED] | 标准整数:有符号范围 -2³¹ ~ 2³¹-1,无符号范围 0 ~ 2³²-1 |
|
| BIGINT [UNSIGNED] | 大整数:有符号范围 -2⁶³ ~ 2⁶³-1,无符号范围 0 ~ 2⁶⁴-1 |
|
| FLOAT [(M,D)] [UNSIGNED] | 单精度浮点数,M = 总长度,D = 小数位数,占用 4 字节 | |
| DOUBLE [(M,D)] [UNSIGNED] | 双精度浮点数,精度高于 FLOAT,占用 8 字节 | |
| DECIMAL(M,D) [UNSIGNED] | 高精度定点数,M = 总长度,D = 小数位数,适合金融数据 | |
| 文本、二进制类型 | CHAR(size) | 固定长度字符串,最大长度 255 字符 |
| VARCHAR(size) | 可变长度字符串,最大长度 65535 字符 | |
| BLOB | 二进制大对象,用于存储图片、文件等二进制数据 | |
| TEXT | 大文本类型,不支持全文索引,不支持设置默认值 | |
| 时间日期类型 | DATE | 日期类型,格式:yyyy-MM-dd |
| DATETIME | 日期时间类型,格式:yyyy-MM-dd HH:mm:ss |
|
| TIMESTAMP | 时间戳类型,格式同 DATETIME,自动记录时间更新 | |
| 字符串特殊类型 | ENUM | 枚举类型,值只能是创建表时指定的枚举列表中的单个值 |
| SET | 集合类型,值可以是创建表时指定的集合中的零个 / 多个值,多值用逗号分隔(值本身不能含逗号) |
1.数值类型
我们为了方便,这里重点讲解tinyint,以点带面
TINYINT 是 MySQL 中一种非常小的整数类型,只占用 1 个字节(8 位)的存储空间
1. 取值范围
| 修饰符 | 取值范围 | 说明 |
|---|---|---|
默认(有符号 SIGNED) |
-128 ~ 127 | 最高位用作符号位 |
UNSIGNED(无符号) |
0 ~ 255 | 所有位都表示数值 |
-
如果不指定
UNSIGNED,默认就是有符号类型 -
超出范围的值会被截断(严格模式下报错)


注意:尽量不使用unsigned,对于int类型可能存放不下的数据,int unsigned同样可能存放不
下,与其如此,还不如设计时,将int类型提升为bigint类型
2.bit类型
1. 基本概念
BIT(M) 用于存储位字段值(bit-field value)
-
M表示位数 ,取值范围 1 ~ 64 -
如果省略
M,默认是BIT(1),即存储 1 个位
例如:BIT(8) 可以存储 8 个二进制位(即 1 个字节),BIT(16) 存储 16 位(2 字节)
2. 存储空间
-
实际占用的字节数 =
(M + 7) / 8(向上取整)例如:
-
BIT(1)~BIT(8)→ 占用 1 字节 -
BIT(9)~BIT(16)→ 占用 2 字节 -
......
-
BIT(57)~BIT(64)→ 占用 8 字节
-
MySQL 以二进制方式存储,不会浪费字节,但最小占用 1 字节
3. 取值范围与表示
-
可存储的二进制值范围:
0到2^M - 1 -
例如:
-
BIT(1):0 或 1 -
BIT(3):000~111(十进制 0~7)
-
在 SQL 语句中,可以用多种形式表示位值:
-
二进制字面量 :
b'101'或0b101(MySQL 8.0 支持0b前缀) -
十进制数字:会自动转换为位值(但不能超出范围)
-
十六进制 :
X'5A'或0x5A


注意事项
-
可读性较差 :直接
SELECT通常看不到直观的数值,需要+0或HEX()函数转换 -
跨语言兼容性 :某些编程语言的 MySQL 驱动可能将
BIT映射为bool(对BIT(1))或二进制字符串/字节数组,处理时要注意类型转换 -
插入时务必注意范围 :
BIT(4)插入b'10000'(十进制 16)会报错,因为超过1111(15) -
索引效率 :
BIT列可以建索引,但实际应用不如TINYINT广泛,因为很多开发者觉得处理不方便 -
默认值 :可以指定默认值,如
DEFAULT b'0'
3.小数类型
1. FLOAT
-
大小:4 字节
-
精度:单精度浮点数,约 7 位有效数字
-
语法 :
FLOAT[(M, D)]-
M:总显示长度(非存储限制) -
D:小数位数
-
-
特点 :存在近似值问题(浮点运算可能不精确),适合科学计算、对精度要求不高的场景。
2. DOUBLE
-
大小:8 字节
-
精度:双精度浮点数,约 15 位有效数字
-
语法 :
DOUBLE[(M, D)] -
特点 :比
FLOAT精度更高,但同样是近似值,适合需要更大范围或稍高精度的浮点数。
3. DECIMAL(定点数)
-
大小:变长,每 9 位十进制数占 4 字节
-
精度 :精确存储,不会丢失精度
-
语法 :
DECIMAL(M, D)-
M:总位数(最大 65) -
D:小数位数
-
-
特点 :用于金额、财务等必须精确计算的场景。计算速度比浮点型慢,但绝对精确。
核心区别总结
| 类型 | 存储 | 精度类型 | 典型场景 |
|---|---|---|---|
FLOAT |
4B | 近似值 | 科学计算、少量小数 |
DOUBLE |
8B | 近似值 | 更大范围的近似值 |
DECIMAL |
变长 | 精确值 | 金额、财务、精确计算 |
一句话 :需要精确(如钱)用 DECIMAL,能容忍微小误差且想省空间用 FLOAT,需要更大范围近似值用 DOUBLE
