我试图将 NSMutableDictionaries 存储为 sqlite 中的 blob,首先通过 NSPropertyListSerialization 或 NSKeyedArchiver 将其转换为 NSData。
当我存储 blob 时,NSData 对象的长度为数千(KB 范围)。当我取回它时,它已被截断为 10 个字节。当我通过 SQLite 浏览器检查数据库时,大部分数据都消失了(如果我将字典存储为 NSPropertyListSerialization,我可以识别记录中的键,但字典的值消失了)。无论我是使用 NSPropertyListSerialization 还是 NSKeyedArchiver 来序列化我的数据,都会发生这种情况。
NSMutableDictionary* item = [items objectAtIndex:i];
NSData *dictionary = [NSKeyedArchiver archivedDataWithRootObject:item];
sqlite3_bind_blob( compiledStatement, 5, [dictionary bytes], [dictionary length], SQLITE_TRANSIENT);
这实际上是我的代码片段,我在另一个相关问题中发布了完整部分。
使用 gdb 或 NSLog 检查 [dictionary length] 的值会产生相同的结果:数据长度在 KB 范围内。
当我稍后检查检索数据时:
NSData* raw = [[NSData alloc] initWithBytes:sqlite3_column_blob(compiledStatement, 1) length:sqlite3_column_bytes(compiledStatement, 1)];
[raw release];
检查 [原始长度] 只给了我 10 个字节。这对于我尝试存储在此列中的每个数据实例都是如此,无论它们的起始大小可能是什么,它们最终都是 10 个字节。我的检索查询没有任何问题。我已经在命令行和 SQL 浏览器中运行了它,我得到了正确的记录和列,但是存储在该特定列的记录中的数据不正确。
我的其余数据怎么了?我使用 sqlite3_bind_blob 的方式有问题吗?我检查了 sqlite 文档以了解终止字符或最大大小限制。我的数据完全在 blob 条目的最大大小范围内,并且我找不到可能会缩小我的数据大小的终端的信息。