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. 取值范围与表示

  • 可存储的二进制值范围: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

注意事项

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

  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

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

相关推荐
wno7045 小时前
postgresSQL压缩版安装与基本命令
数据库·postgresql
聚美智数7 小时前
智能结构化识别-图片结构解析-图像结构化解析-照片结构化解析
android·java·数据库
瀚高PG实验室7 小时前
瀚高数据库常用系统表查询入门指南(附常用SQL)
数据库·sql·postgresql·瀚高数据库
ben9518chen7 小时前
mysql数据库基本操作
数据库·mysql
2603_965148117 小时前
电商选品调研:通过关键词搜索API获取市场热销商品,结合商品详情API分析竞品卖点与定价
开发语言·数据库·人工智能·python·信息可视化
土豆.exe8 小时前
nf_tables 的 verdict 被读了两次:一个十年未闭合的位域错配
java·数据库·网络安全·缓存
缓慢更新8 小时前
表单引擎的存储建模:宽表与文档库的取舍
运维·服务器·网络·数据库·低代码·oracle·适配器模式
Web3&Basketball10 小时前
实测Gemini4Argon:ERQA 87%登顶长程任务榜
数据库·python·大模型·多模态·gemini·长上下文·推理优化
xiaogai_gai10 小时前
金蝶收料通知单查询策略实战教程:从源系统拉取到中间层落地的完整路径
java·前端·数据库
注塑机数据采集联网10 小时前
注塑机数据采集网关对接MES系统数字化技术方案
大数据·网络·数据库·物联网·数据挖掘·数据分析