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

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

相关推荐
sevenll0715 分钟前
DocKit agentic MongoDB GUI 客户端 - 用自然语言和你的数据对话
数据库·mongodb·nosql·agent·桌面客户端
团象科技26 分钟前
从一线实操案例拆解不同出海团队落地海外VPS运维独立站的路径细节
大数据·数据库·人工智能
小马爱打代码41 分钟前
框架 - 组件 - 中间件:生产级参数配置指引
数据库·中间件
asdfg12589631 小时前
一文通俗理解JDBC中的核心概念+案例
java·数据库·oracle·jdbc
点灯小铭1 小时前
基于单片机与DAC0832的双路波形信号发生系统设计
数据库·单片机·mongodb·毕业设计·课程设计·期末大作业
小陈phd1 小时前
Text2SQL智能体学习笔记(二)——NL2SQL落地的隐形基石:元数据库
数据库·笔记·学习
霸道流氓气质1 小时前
阿里云 OSS 从零到实战:概念、配置与 Spring Boot 集成指南
数据库·spring boot·阿里云
茉莉玫瑰花茶1 小时前
综合案例 - AI 智能租房助手 [ 4 ]
数据库·python·ai·langgraph
ULIi096kr1 小时前
MySQL查看表创建时间、修改时间、最后更新时间(精准排查僵尸表)
数据库·mysql
折哥的程序人生 · 物流技术专研1 小时前
Tomcat 严重警告:JDBC 驱动未注销 + 工作线程泄漏 —— 原因、影响与彻底修复(生产级终极指南)
java·运维·数据库·mysql·oracle·tomcat