【问题标题】:How to test if a blob in an sqlite table is not null, without reading the blob entirely?如何在不完全读取 blob 的情况下测试 sqlite 表中的 blob 是否不为空?
【发布时间】:2017-09-17 00:14:54
【问题描述】:

我正在尝试查询具有 blob 列的表,并且需要过滤结果以仅提供在 blob 列中具有内容(任何内容)的行。

但是,执行SELECT column_name FROM table_name WHERE blob_column IS NOT NULL 需要很长时间,我认为这是因为某些 blob 非常重。似乎 WHERE 子句正在读取 blob 的全部内容并将它们与null 进行比较。

有没有办法在不让 sqlite 读取 blob 的全部内容的情况下测试 blob 列是否为空?

【问题讨论】:

标签: sql sqlite blob


【解决方案1】:

由于version 3.7.12,使用length()typeof() 函数可以避免读取二进制数据(查询要快得多)。所以为了避免不必要的开销,必须改变

SELECT column_name FROM table_name WHERE blob_column IS NOT NULL

SELECT column_name FROM table_name WHERE LENGTH(blob_column) IS NOT NULL

SELECT column_name FROM table_name WHERE TYPEOF(blob_column) != 'null'

【讨论】:

  • 哇!这是非常不直观的。
【解决方案2】:

使用 sqlite3_blob_read() 成功返回 SQLITE_OK。否则报错码

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-14
    • 2010-12-04
    • 2015-07-06
    • 2011-01-14
    • 2021-01-14
    • 1970-01-01
    • 2021-04-21
    • 1970-01-01
    相关资源
    最近更新 更多