SQLite动态键入详细信息



由于SQLite可以在任何列中存储任何数据,我的问题是SQLite引擎如何知道哪个是哪个?

假设一个表有列a,并且有两个值123和"#$%"。这两个是如何存储的(我想知道逐字节的布局来理解(?

如果我执行select * from table where a > 0,这些值会发生什么?

显然,引擎需要计算出A列中的每个值类型。它到底是如何做到的?

它是否为每个值存储一个类型标记,以便在选择时检查标记?还是每次检索值时都评估类型

有一个类型标记,称为串行类型。它是一个可变长度的整数,对值的类型和长度进行编码。

NULL、0、1和"(空文本(需要1个字节(串行类型为1个字节,无值(

整数需要2到9个字节(1个字节的串行类型,1到8个字节的值(,因此123需要2个字节。

对于文本值,串行类型可以扩展到多个字节。假设UTF-8,'#$%'需要4个字节(1个字节的串行类型,因为编码长度<=57(

数据库文件格式中有更多详细信息。

最新更新