MySQL的数据类型(一)

前几篇博客我们学会了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. 取值范围与表示

  • 可存储的二进制值范围:02^M - 1

  • 例如:

    • BIT(1):0 或 1

    • BIT(3)000111(十进制 0~7)

在 SQL 语句中,可以用多种形式表示位值:

  • 二进制字面量b'101'0b101(MySQL 8.0 支持 0b 前缀)

  • 十进制数字:会自动转换为位值(但不能超出范围)

  • 十六进制X'5A'0x5A

注意事项

  1. 可读性较差 :直接 SELECT 通常看不到直观的数值,需要 +0HEX() 函数转换

  2. 跨语言兼容性 :某些编程语言的 MySQL 驱动可能将 BIT 映射为 bool(对 BIT(1))或二进制字符串/字节数组,处理时要注意类型转换

  3. 插入时务必注意范围BIT(4) 插入 b'10000'(十进制 16)会报错,因为超过 1111(15)

  4. 索引效率BIT 列可以建索引,但实际应用不如 TINYINT 广泛,因为很多开发者觉得处理不方便

  5. 默认值 :可以指定默认值,如 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

好啦,这篇博客先简绍这三个类型,下篇博客我们在简绍剩余的啦~~

相关推荐
tjc199010052 小时前
golang如何使用t.Cleanup清理测试_golang t.Cleanup测试清理使用策略
jvm·数据库·python
SeSs IZED2 小时前
Redis开启远程连接
数据库·redis·缓存
21439652 小时前
如何提升SQL数据更新的安全性_使用行级锁与悲观锁机制
jvm·数据库·python
uElY ITER2 小时前
VS与SQL Sever(C语言操作数据库)
c语言·数据库·sql
SHoM SSER2 小时前
SQL之CASE WHEN用法详解
数据库·python·sql
Caspian Wren2 小时前
通过Logstash将MySQL数据同步到ES
数据库·mysql·elasticsearch·logstash
2401_835956812 小时前
Golang怎么做代码热更新_Golang热更新教程【精通】
jvm·数据库·python
justjinji2 小时前
如何解决Oracle JDBC驱动版本的兼容性问题_ojdbc8.jar与JDK版本的对应关系
jvm·数据库·python
cyber_两只龙宝3 小时前
【Oracle】Oracle之SQL的聚合函数和分组
linux·运维·数据库·sql·云原生·oracle