【发布时间】:2020-12-31 08:03:46
【问题描述】:
我正在考虑将 BLOB 存储在我的 MariaDB 中,并在必要时将它们流式传输到基于 Web 的客户端。
我希望让客户端知道标头中响应的长度,这意味着在从数据库中读取整个内容之前,我需要文件长度。我可以想到两种方法来做到这一点:
- 将数据库中 blob 的长度存储在单独的列中
SELECT OCTET_LENGTH(blob_field), blob_field FROM table WHERE id=?
我想知道那里的SELECT OCTET_LENGTH(blob_field)。数据库必须已经知道 blob 长度,但它的引擎实际上足够聪明,可以立即知道 OCTET_LENGTH(blob_field) 吗?或者引擎会在我每次执行SELECT 时读取整个 BLOB 字段并实际计算字节数(当然忽略缓存)?
【问题讨论】:
-
我根据the code 强烈怀疑该blob 已被检索并完整传递给
OCTET_LENGTH函数。它不会逐字节计数,数字就在那里,但是如果函数需要,没有逻辑来延迟加载内容。我建议生成一个长度列。