我正在使用Ditto作为我的剪贴板历史记录管理器,数据库现在大约是5.5 gig。这可能太大了; o)删除了一堆截图并对数据库进行了紧凑和修复后,它仍然太大了。
我正在查看下面的表格定义中的主数据表。
CREATE TABLE Data(lID INTEGER PRIMARY KEY AUTOINCREMENT, lParentID INTEGER, strClipBoardFormat TEXT, ooData BLOB)
在sqlite(版本3.7.13)中有一种方法可以找出记录使用了多少空间,这样我就可以删除/它们了吗?
答案 0 :(得分:3)
length(ooData)
应该做到这一点。
length(X):对于字符串值X,长度(X)函数返回 第一个NUL之前的X中的字符数(不是字节数) 字符。由于SQLite字符串通常不包含NUL 字符,长度(X)函数通常会返回总数 字符串X中的字符数。对于blob值X,长度(X) 返回blob中的字节数。如果X为NULL则为长度(X) 一片空白。如果X是数字,则length(X)返回字符串的长度 代表X。
所以你的查询看起来像这样,我相信:
SELECT id_field, length(blobData) AS size, blobdata FROM your_table
WHERE blobData IS NOT NULL
由于您只对数据库中的“最大”文件感兴趣,您可能只想选择最大的文件,因此您需要添加这样的约束
AND size > 1000000;