温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

数据库blob怎么用

发布时间:2026-09-28 03:05:25 来源:亿速云 阅读:92 作者:小樊 栏目:数据库

在数据库中,BLOB(Binary Large Object,二进制大对象) 用来存储二进制数据,比如图片、音频、视频、压缩包、序列化对象等。下面从概念 → 常见数据库用法 → 示例 → 注意事项给你讲清楚。


一、什么是 BLOB

BLOB 不是普通文本,而是原始二进制流,常见类型有:

  • BLOB(通用)
  • TINYBLOB、MEDIUMBLOB、LONGBLOB(MySQL 按大小区分)
  • BYTEA(PostgreSQL)
  • BLOB / CLOB(Oracle,CLOB 存文本)

二、常见数据库中的 BLOB 类型

1️⃣ MySQL

CREATE TABLE files (
  id INT PRIMARY KEY AUTO_INCREMENT,
  name VARCHAR(100),
  data LONGBLOB
);

2️⃣ PostgreSQL

CREATE TABLE files (
  id SERIAL PRIMARY KEY,
  name TEXT,
  data BYTEA
);

3️⃣ Oracle

CREATE TABLE files (
  id NUMBER PRIMARY KEY,
  name VARCHAR2(100),
  data BLOB
);

三、如何使用 BLOB(以 MySQL + Java 为例)

1️⃣ 写入 BLOB(存文件)

File file = new File("test.jpg");
FileInputStream fis = new FileInputStream(file);

String sql = "INSERT INTO files(name, data) VALUES(?, ?)";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1, file.getName());
ps.setBinaryStream(2, fis, (int) file.length());
ps.executeUpdate();

2️⃣ 读取 BLOB(取文件)

String sql = "SELECT data FROM files WHERE id = ?";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setInt(1, 1);
ResultSet rs = ps.executeQuery();

if (rs.next()) {
    InputStream is = rs.getBinaryStream("data");
    FileOutputStream fos = new FileOutputStream("out.jpg");
    byte[] buffer = new byte[1024];
    int len;
    while ((len = is.read(buffer)) != -1) {
        fos.write(buffer, 0, len);
    }
}

四、其他语言怎么用

  • Python(MySQL)
with open("test.jpg", "rb") as f:
    data = f.read()
cursor.execute("INSERT INTO files(name, data) VALUES(%s,%s)", ("test.jpg", data))
  • PHP
$data = file_get_contents("test.jpg");
$stmt = $pdo->prepare("INSERT INTO files(data) VALUES(?)");
$stmt->execute([$data]);

五、使用 BLOB 的注意事项 ⚠️

  1. 不要存太大的文件

    • 数据库备份慢
    • 性能差
    • 推荐:文件存磁盘 / OSS,数据库只存路径
  2. BLOB 不便于搜索

    • 不能 LIKE
    • 不能索引
  3. 事务和内存

    • 大 BLOB 会占用大量内存和事务日志

六、BLOB vs 文件路径(推荐做法)

✅ 推荐:

文件 → 服务器 / 云存储
数据库 → 存路径 / URL

❌ 不推荐:

大文件直接塞数据库

如果你告诉我:

  • 用的什么数据库
  • 用的什么编程语言
  • 是存图片 / 文件 / 其他

我可以直接给你可运行的完整示例。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手