在数据库中,BLOB(Binary Large Object,二进制大对象) 用来存储二进制数据,比如图片、音频、视频、压缩包、序列化对象等。下面从概念 → 常见数据库用法 → 示例 → 注意事项给你讲清楚。
BLOB 不是普通文本,而是原始二进制流,常见类型有:
BLOB(通用)TINYBLOB、MEDIUMBLOB、LONGBLOB(MySQL 按大小区分)BYTEA(PostgreSQL)BLOB / CLOB(Oracle,CLOB 存文本)CREATE TABLE files (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100),
data LONGBLOB
);
CREATE TABLE files (
id SERIAL PRIMARY KEY,
name TEXT,
data BYTEA
);
CREATE TABLE files (
id NUMBER PRIMARY KEY,
name VARCHAR2(100),
data 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();
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);
}
}
with open("test.jpg", "rb") as f:
data = f.read()
cursor.execute("INSERT INTO files(name, data) VALUES(%s,%s)", ("test.jpg", data))
$data = file_get_contents("test.jpg");
$stmt = $pdo->prepare("INSERT INTO files(data) VALUES(?)");
$stmt->execute([$data]);
不要存太大的文件
BLOB 不便于搜索
事务和内存
✅ 推荐:
文件 → 服务器 / 云存储
数据库 → 存路径 / URL
❌ 不推荐:
大文件直接塞数据库
如果你告诉我:
我可以直接给你可运行的完整示例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。