2016-04-27 35 views
1

我试图保持尽可能小的SQLite表。我的表只包含1个字节的无符号整数。但是,我不清楚什么时候创建一个新表格,该表格的底层结构是如何创建的。例如:能够控制INTEGER类型的字节大小

CREATE TABLE test (SmallNumbers INTEGER) 

生成的SmallNumbers字段的大小是1,2,4 ... 8字节吗?

如果我使用上述命令创建100万条包含数字“1”的记录来创建表,那么生成的.db文件是否比插入的100万条记录都小,所有记录都包含值412,321,294,967,295 ?

我如何确保这样一个表可以尽可能小,因为我向表中插入1个字节的无符号整数(关于磁盘空间)?

+0

我尝试创建一个100万行数据库,其中所有元素都在255以下(9.5MB总大小),然后创建另一个百万行数据库,其中所有元素大于65535,第二个数据库大得多(12MB)。所以,似乎'sqlite'确实使用了*适当的最小*大小。 –

回答

1

每SQLite的文档:https://www.sqlite.org/datatype3.html

存储在SQLite数据库(或操纵通过 数据库引擎)的每个值具有以下的存储类中的一种:

INTEGER。该值是一个有符号整数,根据值的大小存储在1,2,3,4,6或8个字节中。

您不需要做任何事情来确保表格尽可能小。 SQLite会根据价值来选择可以存储您提供的值的最小存储类。

+0

谢谢,但我已经在发布此问题之前阅读过您提供多次的网址。该网址无法回答我的问题。 – instrumentally

+0

然后你可能需要澄清你想知道的。我所引用的文字是如何回答你的问题的?用于存储任何整数值的字节数量足够大以存储该值。 –

+0

那么你是说SmallNumbers字段没有在创建新表时定义的静态宽度/大小?如果是这样,这似乎与允许用户使用VARCHAR(2)设置字段宽度的SQLite功能不一致。为什么VARCHAR可以使用硬性大小(例如“2”)参数限制来定义,但是包含INTEGER值的字段是灵活的,并且在创建表时不需要大小定义? – instrumentally