首页
学习
活动
专区
圈层
工具
发布

blob图片存mysql

Blob(Binary Large Object)是一种数据类型,用于存储大量的二进制数据,如图片、音频、视频等。在MySQL数据库中,可以使用BLOB类型来存储这些数据。

基础概念

  • BLOB类型:MySQL中的BLOB类型有四种:TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB,它们分别用于存储不同大小的二进制数据。
  • 存储方式:Blob数据通常以二进制形式存储在数据库中,可以直接从数据库中读取并显示。

优势

  • 集中管理:将图片等二进制数据存储在数据库中,便于集中管理和备份。
  • 简化应用逻辑:应用程序可以直接从数据库读取图片数据,简化了文件系统的管理。

类型

  • TINYBLOB:最大长度为255字节。
  • BLOB:最大长度为65,535字节(64KB)。
  • MEDIUMBLOB:最大长度为16,777,215字节(16MB)。
  • LONGBLOB:最大长度为4,294,967,295字节(4GB)。

应用场景

  • 用户头像:存储用户的个人头像。
  • 产品图片:存储电商平台上的产品图片。
  • 多媒体文件:存储音频、视频等多媒体文件。

存储Blob图片到MySQL

以下是一个简单的示例,展示如何将图片存储到MySQL数据库中:

数据库表结构

代码语言:txt
复制
CREATE TABLE images (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255),
    image BLOB
);

存储图片

代码语言:txt
复制
import mysql.connector
from mysql.connector import Error

def store_image(image_path):
    try:
        connection = mysql.connector.connect(host='localhost',
                                             database='testdb',
                                             user='root',
                                             password='password')

        cursor = connection.cursor()

        with open(image_path, 'rb') as file:
            binary_data = file.read()

        sql_insert_blob_query = """ INSERT INTO images
                                      (name, image) VALUES (%s,%s)"""

        insert_blob_tuple = (image_path, binary_data)
        result = cursor.execute(sql_insert_blob_query, insert_blob_tuple)
        connection.commit()
        print("Image and file inserted successfully as id: %s" % result)

    except Error as e:
        print("Error while connecting to MySQL", e)

    finally:
        if connection.is_connected():
            cursor.close()
            connection.close()
            print("MySQL connection is closed")

store_image('path_to_your_image.jpg')

从MySQL读取图片

代码语言:txt
复制
def retrieve_image(image_id):
    try:
        connection = mysql.connector.connect(host='localhost',
                                             database='testdb',
                                             user='root',
                                             password='password')

        cursor = connection.cursor()

        sql_select_blob_query = """SELECT name, image from images where id = %s"""
        cursor.execute(sql_select_blob_query, (image_id,))
        record = cursor.fetchall()

        for row in record:
            print("Image Name: ", row[0])
            image_name = row[0]
            with open(f'retrieved_{image_name}', 'wb') as file:
                file.write(row[1])

    except Error as e:
        print("Error while connecting to MySQL", e)

    finally:
        if connection.is_connected():
            cursor.close()
            connection.close()
            print("MySQL connection is closed")

retrieve_image(1)

可能遇到的问题及解决方法

  1. 存储空间不足:确保MySQL服务器有足够的存储空间来存储Blob数据。
  2. 性能问题:Blob数据可能会影响数据库的性能,特别是在查询和备份时。可以考虑将Blob数据存储在文件系统中,只在数据库中存储文件的路径。
  3. 数据完整性:确保在存储和读取Blob数据时,数据的完整性得到保护,避免数据损坏。

参考链接

通过以上内容,你应该对Blob图片存储到MySQL有了全面的了解,并且知道如何解决常见问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

在Ionic和Android中上传Blob图片

[记录点滴]在Ionic和Android中上传Blob图片 0x00 摘要 本文是开发中的简略记录,具体涉及知识点有:Blob,Ionic,Android和Lua。...起因是因为刚刚看到一篇关于Blob的文章你不知道的 Blob ,突然回忆起来在开发过程中也曾经使用过这种图片,所以就翻了翻代码,整理记录下来。...0x01 Blob Blob(Binary Large Object)表示二进制类型的大对象,通常是影像、声音或多媒体文件。...MySql/Oracle数据库中,就有一种Blob类型,专门存放二进制数据。...0x02 项目简述 项目涉及方面比较多,有Ionic,Android,ios,后台处理图片部分是Lua。客户端需要上传小图片到后台。因为ios中上传图片这部分我没有参与,所以略过。

2.1K20
  • Redis是否可以存图片、视频?

    一、Redis是否可以用于存储图片、视频? 前几天看到某大型家电工厂的工业互联网系统架构图,发现用MongoDB存储图片及视频。...那Redis同样也是Json类型的远程数据字典服务器,也可以用于存储图片、视频。实际Redis可以用512MB的空间存储用于存储字符串型的数据。...虽然技术上可以这么做,但Redis原本就是内存型数据库,用于存储图片、视频是非常不划算的。建议多利用HDFS、NAS、对象存储等分布式的云存储系统。 二、Redis如何存储真实对象的名称?...像MongoDB一样,后起之秀,一般对复制、分片是原生支持,比起Mysql等关系数据库系统的复杂配置,Redis已经可以原生支持这两个功能,而且配置非常简单。

    10.7K20

    放弃General存放图像,VFP的BLOB存图存文件也是非常香

    Blob 的单字符缩写是“W”。...这里是关于 Blob 的一些细节: Blob 的功能与 Memo 类似:你不能在其上建立索引,它接收 Null 值,在一个表或者游标中的 Blob 字段有一个 2GB 数据的限制(当然了,FPT 文件的总大小也只能有...在一个 BROWSE 窗口或者 Grid 中,一个 Blob 字段中如果是空的,则显示为 "blob",否则则显示为“Blob”。...在一个 General 字段中存储图像需要有一个关联到一个 ActiveX Server 的文件,而存储在一个 Blob 字段中就简单了,它们很容易去更新,跟使用 APPEND GENERAL 不同,你可以使用象下面这样的东西来把一幅图片放入到一个...(picture,"1.gif") 显示Blob 字段中的图像 要在一个表单上显示存储在一个 Blob 字段中的图像,只要简单的把一个 Image 控件的 PictureVal 属性设置为这个 Blob

    1.2K20

    MySQL数据类型之TEXT与BLOB

    二者之间的主要差别是BLOB能用来保存二进制数据,比如照片;而TEXT只能保存字符数据,比如一遍文章或日记。...TEXT和BLOB中又分别包括TEXT,MEDIUMTEXT,LONGTEXT和BLOB,MEDIUMBLOB,LONGBLOB三种不同的类型,他们之间的主要区别是存储文本长度不用和存储字节不用,用户应该根据实际情况选择能够满足需求的最小存储类型...可以使用合成的(Synthetic)索引来提高大文本字段(BLOB或TEXT)的查询性能。...合成的散列索引对于那些BLOB或TEXT数据列特别有用。用散列标识符值查找的速度比搜索BLOB列的本身速度快很多。 创建一张表,来介绍合成索引的使用方法。 ?...在不必要的时候避免检索大型的BLOB或TEXT值。 把BLOB或TEXT列分离到单独的表中。

    4.5K30

    如何使用FormData上传压缩裁剪后的图片Blob对象

    在前端页面,我们通常会遇到需要用户上传图片的操作,可能还会在前端进行图片编辑的操作(比如头像的选区裁剪),然后如果图片过大的话,我们还会对图片进行压缩。...这些功能我们通常通过Canvas来进行,最后使用Canvas API函数toDataURL来得到图片的Base64字符串,然后当我们要上传到后台的时候,会面临2种选择: 直接将图片的Base64字符串Post...到后端进行处理和保存 在前端将Base64字符串转换成二进制的Blob对象形式,再使用常规的文件上传形式(即FormData)来将其上传到后端 第一种方式对前端来说比较简单,主要的处理逻辑在后端。...= null; try { blob = new Blob([buff], { type: fileType });...生成的表单数据中,上传文件对应的filename会被设置为blob: ?

    4.7K30

    mysql 5.7 溢出页 FIL_PAGE_TYPE_BLOB

    其实代码里面存在 if (page_type == FIL_PAGE_TYPE_BLOB || page_type == FIL_PAGE_SDI_BLOB) 之类的代码基本上就能说明5.7的溢出页(FIL_PAGE_TYPE_BLOB...~但是还是水一篇~FIL_PAGE_TYPE_BLOBFIL_PAGE_TYPE_BLOB 的结构和FIL_PAGE_SDI_BLOB基本上一样, 只不过前者记录的是这一页存在多少数据, 而后者记录的是...不知道为啥这么设计, 没发现它两的优势.好了, 还是来看看FIL_PAGE_TYPE_BLOB的结构吧SIZE: 这个溢出页在本页中记录的大小.PAGENO: 下一页的pageno, 如果是4294967295...('>3LQ',self.read(20))if self.table.mysqld_version_id > 50744: # 8.0环境_tdata = first_blob(self.f,PAGENO...github.com/ddcw/ibd2sql/archive/refs/heads/main.zipunzip main.zipcd ibd2sql-mainpython3 main.py /data/mysql

    58920

    消失的图片:别让 blob: URL 成为你系统里的“内存幻象”

    但你是否遇到过这种诡异的情况:图片在上传时显示正常,但切换了一下页面路由,或者刷新了一下会话,图片就变成了裂图,控制台无情地抛出 net::ERR_FILE_NOT_FOUND?...这背后的根因在于对 Blob URL 生命周期 的误解。...一、 核心误区:blob: URL 并不是持久资源很多开发者潜意识里把 blob:http://localhost:3000/xxx 当作一个普通的 URL,认为只要字符串在,资源就在。...真相是:blob: URL 是一个指向内存的指针。它仅在创建它的当前文档(Document)生命周期内有效。...不要对正常的 http 链接或普通的字符串执行回收操作,否则可能误伤其他正常的图片渲染。

    46110

    Nginx+lua+mysql实时存日志

    刚开始的时候看了Nginx和mysql的连接模块。比如说nginx-mysql-module,可以连接mysql。...mysql访问阶段属于内容生成阶段,所以代理运行的时间和状态,mysql都无法获取的到。因此,这种通过nginx直连mysql的方式无法达到我们的要求。...Mysql 访问权限的问题 不但访问Mysql的Mysql用户需要有操作对应数据库的权限,还需要调用Mysql命令的用户具有访问mysql的权限。...Mysql客户端显示数据的编码,连接Mysql用的编码(即数据存入mysql时,数据的编码),Mysql存储用的编码(字段,表,数据库三种格式可能不同)。...不管Mysql存储用的编码是什么,只要Mysql客户端显示数据的编码和连接Mysql用的编码相同,数据就能通过mysql客户端正确显示。

    3.3K70
    领券