BLOB 是用来存“二进制大文件”的字段类型
BLOB 是用来存“二进制大文件”的字段类型,可以存 0 到 65535 字节的数据,常用来存图片、音频、PDF、Word 等“非文本”内容。
BLOB 0-65535 bytes 二进制形式的长文本数据
✅ 关键词 1:BLOB
- 全称:Binary Large Object
- 中文:二进制大对象
- 作用:专门用来存二进制数据(不是纯文本)
你可以把 BLOB 理解成数据库里的 “U盘”,可以往里塞文件,但不是用来看文字的。
✅ 关键词 2:0 - 65535 bytes
- 表示:最多能存 65535 字节 = 64KB 的数据。
- 所以这个 BLOB 类型,也叫:TINYBLOB 或者普通 BLOB
🔸注意:字节 ≠ 字符。一个汉字在 UTF-8 编码里占 3 个字节。
✅ 举个例子:图片存进数据库
比如你有一张 JPG 图片,大小是 42KB:
CREATE TABLE images (id INT PRIMARY KEY,name VARCHAR(255),data BLOB -- 存二进制的图片内容
);
然后你用程序把图片读成二进制内容:
# Python 插入 BLOB 图片
with open("dog.jpg", "rb") as f:binary_data = f.read()cursor.execute("INSERT INTO images (id, name, data) VALUES (%s, %s, %s)",(1, "cute dog", binary_data))
✅ BLOB 存的是图片的“原始文件内容”,不是链接、不是 base64,是直接压进数据库的!
✅ 哪些东西可以用 BLOB 存?
类型 | 示例 |
---|---|
图片 | .jpg, .png, .webp |
音频 | .mp3, .wav |
视频 | .mp4, .mov |
文档 | .pdf, .docx, .xlsx |
序列化对象 | pickle 文件、模型权重等 |
✅ BLOB 有几种?
类型 | 最大容量 | 场景 |
---|---|---|
TINYBLOB | 255 字节 | 很小的二进制,例如图标 |
BLOB | 64KB(65535 字节) | 普通图片、文件 |
MEDIUMBLOB | 16MB | 大点的音视频 |
LONGBLOB | 4GB | 超大视频、模型等 |
❗提醒:什么时候不要用 BLOB?
虽然 BLOB 很强,但:
- ❌ 不适合频繁读取(效率低)
- ❌ 不适合网页直接访问(不能像 URL 一样用)
- ❌ 文件太大建议放对象存储(如 OSS、S3),数据库只存链接
✅ 总结一句话:
BLOB
是数据库里的“文件柜”,专门存储图片、视频、音频等二进制数据,最多能放 64KB(BLOB 类型本身)。如果你想存一个 PDF、图片、模型文件,都可以用它装起来。
我们来做一个完整实战:上传头像图片(JPG)存进 MySQL 数据库的 BLOB 字段,并能读出来恢复成图片文件 ✅
🧱 场景设定:用户头像上传
你有个 users
表,每个用户上传一张头像图(avatar
字段),你希望直接把图片数据压进数据库。
📄 第一步:创建 SQL 表
CREATE TABLE users (id INT PRIMARY KEY AUTO_INCREMENT,username VARCHAR(100),avatar BLOB -- 存头像二进制数据(最多64KB)
);
🐍 第二步:Python 插入图片数据
假设你有一张 avatar.jpg
头像,代码如下:
import mysql.connector# 连接 MySQL 数据库
conn = mysql.connector.connect(host='localhost',user='root',password='your_password',database='your_db'
)
cursor = conn.cursor()# 读取图片为二进制数据
with open("avatar.jpg", "rb") as f:avatar_data = f.read()# 插入用户数据
sql = "INSERT INTO users (username, avatar) VALUES (%s, %s)"
cursor.execute(sql, ("alice", avatar_data))
conn.commit()print("✅ 插入成功!")
cursor.close()
conn.close()
🖼️ 第三步:读取图片并保存回文件
import mysql.connectorconn = mysql.connector.connect(host='localhost',user='root',password='your_password',database='your_db'
)
cursor = conn.cursor()# 查询头像数据
sql = "SELECT avatar FROM users WHERE username = %s"
cursor.execute(sql, ("alice",))
result = cursor.fetchone()if result:avatar_data = result[0]# 写入新图片文件with open("output_avatar.jpg", "wb") as f:f.write(avatar_data)print("✅ 已恢复头像为 output_avatar.jpg")
else:print("❌ 没找到用户")cursor.close()
conn.close()
📌 实战说明
步骤 | 操作 | 说明 |
---|---|---|
1 | 用 open(..., "rb") 读图 | 得到二进制内容 |
2 | 用 SQL INSERT 插入 BLOB | 数据直接压进数据库 |
3 | 读出 avatar 列 | 得到二进制 -> 再写成文件 |
🧠 常见问题
问题 | 解决方案 |
---|---|
图片太大存不下(超 64KB) | 改字段为 MEDIUMBLOB |
插入失败:类型错误 | 确保传的是 bytes 类型 |
存储效率慢、访问不快 | 文件存 OSS、数据库存链接更合理 |
🧪 Bonus:加个图片类型字段
你也可以扩展一下表结构:
ALTER TABLE users ADD COLUMN avatar_type VARCHAR(20);
然后上传时存 MIME 类型,比如 image/jpeg
,以后从数据库恢复图片时还能动态判断类型。
相关文章:
BLOB 是用来存“二进制大文件”的字段类型
BLOB 是用来存“二进制大文件”的字段类型,可以存 0 到 65535 字节的数据,常用来存图片、音频、PDF、Word 等“非文本”内容。 BLOB 0-65535 bytes 二进制形式的长文本数据✅ 关键词 1:BLOB 全称:Binary Large Object中文&…...
5.Declare_Query_Checking.ipynb
这个教程 5.Declare_Query_Checking.ipynb 主要讲解了如何使用 DECLARE 查询检查器来分析事件日志中的约束关系。 1. 主要功能 这个教程展示了如何使用 DeclareQueryChecker 来: 发现事件日志中满足特定支持度的约束模式查询不同类型的约束关系分析活动之间的关联…...

【知识点】第7章:文件和数据格式化
文章目录 知识点整理文件概述文件的打开和关闭文件的读操作文件的写操作 练习题填空题选择题 知识点整理 文件概述 文件是一个存储在辅助存储器上的数据序列,可以包含任何数据内容。概念上,文件是数据的集合和抽象,类似地,函…...

NetSuite Bundle - Dashboard Refresh
儿童节快乐! 今朝发一个Bundle,解决一个NetSuite Dashboard的老问题。出于性能上的考虑,NetSuite的Dashboard中的Portlet,只能逐一手工刷新。有人基于浏览器做了插件,可以进行自动刷新。但是在我们做项目部署时&#…...
AI+3D 视觉重塑塑料袋拆垛新范式:迁移科技解锁工业自动化新高度
在工业自动化浪潮席卷全球的当下,仓储物流环节的效率与精准度成为企业降本增效的关键战场。其中,塑料袋拆垛作为高频、高重复性的作业场景,传统人工或机械臂操作面临着诸多挑战。迁移科技,作为行业领先的 3D 工业相机和 3D 视觉系…...

智慧赋能:移动充电桩的能源供给革命与便捷服务升级
在城市化进程加速与新能源汽车普及的双重推动下,移动充电桩正成为能源供给领域的一场革命。传统固定充电设施受限于布局与效率,难以满足用户即时、灵活的充电需求,而移动充电桩通过技术创新与服务升级,打破了时空壁垒,…...
【项目实践】SMBMS(Javaweb版)(三)登出、注册、注销、修改
文章目录 登出、注册、注销、修改登出操作的实现逻辑及方式防止用户登出后可以继续访问修改密码功能实现导入jsp实现Dao层数据接口实现Service层业务接口注册Servlet 注册和注销 用户的方式导入jsp实现Dao层的数据逻辑实现Service逻辑注册Servlet 登出、注册、注销、修改 登出…...
斐波那契数列------矩阵幂法
斐波那契数列 斐波拉楔数是我们在学递归的使用看到的题目,但递归法是比较慢的,后面我们用循环递进来写的,但今天我有遇到了新的方法—— 矩阵幂法(线性代数的知识点)。 矩阵幂法: F11*F10*F2; F20*F11*…...
【Go语言基础【四】】局部变量、全局变量、形式参数
文章目录 一、一句话总结二、作用域分类1. 局部变量(函数内/块内变量)1.1、语法说明1.2、示例 2. 全局变量(包级变量)2.1、语法说明2.2、示例:全局变量的访问 3. 形式参数(函数参数) 三、作用域…...
DeepSeek 赋能车路协同:智能交通的破局与重构
目录 一、引言二、智能交通车路协同系统概述2.1 系统定义与原理2.2 系统构成2.3 发展现状与挑战 三、DeepSeek 技术剖析3.1 DeepSeek 简介3.2 核心技术原理3.2.1 Transformer 架构3.2.2 混合专家架构(MoE)3.2.3 多头潜在注意力(MLA࿰…...
RabbitMQ 的异步化、解耦和流量削峰三大核心机制
RabbitMQ 的异步化、解耦和流量削峰三大核心机制 RabbitMQ 是解决数据库高并发问题的利器,通过异步化、解耦和流量削峰三大核心机制保护数据库。下面从设计思想到具体实现,深入剖析 RabbitMQ 应对高并发的完整方案: 一、数据库高并发核心痛点…...
Ubuntu 25.10 将默认使用 sudo-rs
非盈利组织 Trifecta Tech Foundation 报告,Ubuntu 25.10 将默认使用它开发的 sudo-rs——用内存安全语言 Rust 开发的 sudo 实现。 Ubuntu 25.10 代号 Questing Quokka,预计将于 2025 年 10 月释出,是一个短期支持版本。Sudo-rs 是 Trifect…...
Maven 和 Gradle 依赖管理的详细说明及示例,涵盖核心概念、配置方法、常见问题解决和工具对比。
一、Maven 依赖管理 1. 核心概念 依赖声明:在 pom.xml 中通过 <dependency> 标签定义依赖项,包含 groupId、artifactId、version。仓库:依赖下载的来源,包括中央仓库(Maven Central࿰…...

【Web应用】若依框架:基础篇21二次开发-页面调整
文章目录 ⭐前言⭐一、课程讲解⭐二、怎样选择设计模式?🌟1、寻找合适的对象✨1) ⭐三、怎样使用设计模式?🌟1、寻找合适的对象✨1) ⭐总结 标题详情作者JosieBook头衔CSDN博客专家资格、阿里云社区专家博主、软件设计工程师博客内…...

【 java 基础知识 第一篇 】
目录 1.概念 1.1.java的特定有哪些? 1.2.java有哪些优势哪些劣势? 1.3.java为什么可以跨平台? 1.4JVM,JDK,JRE它们有什么区别? 1.5.编译型语言与解释型语言的区别? 2.数据类型 2.1.long与int类型可以互转吗&…...

CVE-2020-17518源码分析与漏洞复现(Flink 路径遍历)
漏洞概述 漏洞名称:Apache Flink REST API 任意文件上传漏洞 漏洞编号:CVE-2020-17518 CVSS 评分:7.5 影响版本:Apache Flink 1.5.1 - 1.11.2 修复版本:≥ 1.11.3 或 ≥ 1.12.0 漏洞类型:路径遍历导致的任…...

Excel表格批量下载 CyberWin Excel Doenlaoder 智能编程-——玄武芯辰
使用 CyberWin Excel Downloader 进行 Excel 表格及各种文档的批量下载,优势显著。它能大幅节省时间,一次性获取大量所需文档,无需逐个手动下载,提升工作效率。可确保数据完整性与准确性,避免因重复操作产生失误。还便…...

可编辑PPT | 基于大数据中台新能源智能汽车应用解决方案汽车大数据分析与应用解决方案
这份文档是一份关于新能源智能汽车应用解决方案的详细资料,它深入探讨了智能汽车行业的发展趋势,指出汽车正从单纯交通工具转变为网络入口和智能设备,强调了车联网、自动驾驶、智能娱乐等技术的重要性。文档提出了一个基于大数据中台的车企数…...
【统计方法】基础分类器: logistic, knn, svm, lda
均方误差(MSE)理解与分解 在监督学习中,均方误差衡量的是预测值与实际值之间的平均平方差: MSE E [ ( Y − f ^ ( X ) ) 2 ] \text{MSE} \mathbb{E}[(Y - \hat{f}(X))^2] MSEE[(Y−f^(X))2] MSE 可以分解为三部分࿱…...
AtomicInteger原子变量和例题
目录 AtomicInteger源代码加1操作解决ABA问题的AtomicStampedReference 按顺序打印方法 AtomicInteger源代码 // java.util.concurrent.atomic.AtomicIntegerpublic class AtomicInteger extends Number implements java.io.Serializable {private static final long serialVe…...
simulink有无现成模块可以实现将三个分开的输入合并为一个[1*3]的行向量输出?
提问 simulink有无现成模块可以实现将三个分开的输入合并为一个[1*3]的行向量输出? 回答 Simulink 本身没有一个单独的模块能够直接将三个分开的输入合并成一个 [13] 行向量输出,但是可以通过 组合模块实现你要的效果。 ✅ 推荐方式:Mux …...

k8s集群安装坑点汇总
前言 由于使用最新的Rocky9.5,导致kubekey一键安装用不了,退回Rocky8麻烦机器都建好了,决定手动安装k8s,结果手动安装过程中遇到各种坑,这里记录下; k8s安装 k8s具体安装过程可自行搜索,或者deepseek; 也…...
Selenium 和playwright 使用场景优缺点对比
1. 核心对比概览 特性SeleniumPlaywright诞生时间2004年(历史悠久)2020年(微软开发,现代架构)浏览器支持所有主流浏览器(需驱动)Chromium、Firefox、WebKit(内置引擎)执…...

从 Stdio 到 HTTP SSE,在 APIPark 托管 MCP Server
MCP(Model Context Protocol,模型上下文协议) 是一种由 Anthropic 公司于 2024 年 11 月推出的开源通信协议,旨在标准化大型语言模型(LLM)与外部数据源和工具之间的交互。 它通过定义统一的接口和通信规则…...
Python训练营打卡Day43
kaggle找到一个图像数据集,用cnn网络进行训练并且用grad-cam做可视化 进阶:并拆分成多个文件 config.py import os# 基础配置类 class Config:def __init__(self):# Kaggle配置self.kaggle_username "" # Kaggle用户名self.kaggle_key &quo…...

Mysql锁及其分类
目录 InnoDb锁Shared locks(读锁) 和 Exclusive locks(写锁)Exclusive locksShared locks Intention Locks(意向锁)为什么要有意向锁? Record Locks(行锁)Gap Locks(间隙锁)Next-Key LocksInsert Intention Locks(插入…...
RabbitMQ实用技巧
RabbitMQ是一个流行的开源消息中间件,广泛用于实现消息传递、任务分发和负载均衡。通过合理使用RabbitMQ的功能,可以显著提升系统的性能、可靠性和可维护性。本文将介绍一些RabbitMQ的实用技巧,包括基础配置、高级功能及常见问题的解决方案。…...

Postgresql源码(146)二进制文件格式分析
相关 Linux函数调用栈的实现原理(X86) 速查 # 查看elf头 readelf -h bin/postgres# 查看Section readelf -S bin/postgres (gdb) info file (gdb) maint info sections# 查看代码段汇编 disassemble 0x48e980 , 0x48e9b0 disassemble main# 查看代码段某…...
spring ai mcp 和现有业务逻辑如何结合,现有项目用的是spring4.3.7
将 Spring AI 的 MCP(Model Context Protocol)协议集成到基于 Spring 4.3.7 的现有项目中, 需解决版本兼容性和架构适配问题。 有两种方式:1 mcp tool 封装, 2:如果是微服务,可以用spring ai a…...

【设计模式-4.11】行为型——解释器模式
说明:本文介绍行为型设计模式之一的解释器模式 定义 解释器模式(Interpreter Pattern)指给定一门语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子。解释器模式是一种…...