我必须在 sqlite-database 中存储许多 SHA256 值,现在我想知道哪个 sqlite-affinity 是正确的。SHA256 值的输出长度为 256bit=32byte。我正在寻找可以处理此问题但也不会“浪费”磁盘空间的 sqlite-affinity,因为在我的情况下,我有很多数据集。我在这个网站上阅读了很多关于 sqlite 中数据类型的有用信息,但我仍然不知道哪种类型对于 SHA256 值是正确的。我更喜欢像“bytearray(32)”这样的东西,所以我认为varchar(32)
可能是那个。但后来我记得我可能无法将所有这些字节转换为可打印字符以将它们存储为字符数组。所以看来我必须使用Blob
.
不幸的是,并没有真正找到有关限制 sqlite 中的Blob
-size 以及 sqlite 如何在内部处理 blob 的任何有用信息。我想使用我的哈希值始终具有相同长度的信息来优化数据库的磁盘使用:我希望 sqlite 知道对于这个Blob
-column 它总是只需要保留 32 个字节,永远不会更多。所以我想使用类似Blob(32)
列类型的东西。这可能吗?如果是的话:这有意义还是有任何谬误?
您可以
BLOB(32)
用作数据类型。SQLite 不限制文本或 blob 值的大小,并且永远不会分配比实际需要更多的存储空间。SQLite 几乎忽略了这个数字,它的主要目的是为您提供文档。
如果要强制执行长度,请添加约束:
CHECK (length(my_column) = 32)
.