首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQLite内部设备-记录

SQLite内部设备-记录
EN

Database Administration用户
提问于 2020-03-05 16:13:53
回答 1查看 281关注 0票数 2

嘿,我正试着把我的注意力集中在SQLite数据存储上,特别是它是如何存储记录的。我找到了一本书SQLlite的最终指南,其中作者解释了内部记录格式(图9-5,第351页):

给定表:

代码语言:javascript
复制
sqlite> SELECT * FROM episodes ORDER BY id LIMIT 1;
id   season  name
---  ------  --------------------
0    1       Good News Bad News

其内部记录格式如下:

代码语言:javascript
复制
| 04 | 01 | 01 | 49 |   | 00 | 01 | Good News Bad News |

标题长4字节。标题大小反映了这一点,并将其本身编码为单个字节。第一种类型对应于id字段,为1字节有符号整数。第二种类型对应于季节字段。名称类型条目为奇数,意味着它是一个文本值。因此,它的大小由(49-13)/2=18字节指定。

具体来说,我对TEXT属性很好奇,在上面的示例中,我们有一个长度为18个字符的字符串。TEXT在SQLite中的规则如下:

代码语言:javascript
复制
Type Value     Meaning   Length of Data
----------     -------   --------------------
N>13 and odd   TEXT      (N-13)/2

当绳子变长的时候,会有什么问题呢?它会超出一个字节的范围。

EN

回答 1

Database Administration用户

发布于 2020-03-05 18:25:31

书中的作者要么描述了一些非常古老的SQLite版本,要么他们说“header大小被编码为一个字节”时犯了一个错误。

“描述和定义自3.0.0版(2004-06-18版)以来所有版本的文档所使用的磁盘上数据库文件格式”的C0声明如下:

记录格式广泛使用64位有符号整数的可变长度整数varint表示。The头以一个varint开头,它确定标题中的总字节数。后面是一个或多个额外的变量,每列一个。

可变长度整数或"varint“是64位双补整数的静态Huffman编码,它使用较少的空间来处理小的正值。varint的长度在1到9字节之间。

所以

用于大型字符串和BLOB的串行类型varint可能扩展到两个或三个字节变量。

这使得它们可以表示相当长的值。

票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/261302

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档