2010-12-14 83 views

回答

13

这个问题在SQLite的上下文中没有意义,因为它只支持单个TEXT字段类型。这里不存在“固定宽度”与“可变长度”的区别。

尽管SQLite会让你将字段定义为具有特定类型,但所有这些都是(至多)设置该字段的首选项以便在存储模糊数据时使用的类型(例如,是否将“3”存储为INTEGER,REAL或TEXT)。您仍然可以在任何SQLite字段中存储任何类型的数据,而不管其类型。

具体涉及CHAR与VARCHAR,http://www.sqlite.org/datatype3.html告诉我们:

如果列 声明的类型包含字符串的 “CHAR”, “CLOB” 或 “TEXT” 那么列有 TEXT亲和力。请注意,类型 VARCHAR包含字符串“CHAR”,因此 被分配了TEXT关联。

+0

但我也可以从表中删除所有text/varchar/char列。这将是固定的宽度。我的问题是这样做是否能够更快地搜索列(除了它只是很小)。 – David 2010-12-14 12:24:22

+5

不,它不会。正如链接文档所解释的,SQLite使用动态字段类型。即使您将字段声明为INTEGER,您仍然可以存储浮点数,文本或甚至斑点。 “INTEGER”声明为该字段提供了将数据存储为整数的优先选择,但不会将其限制为整数。它仍然是一个可变宽度的列/记录。 (这甚至忽略了INTEGER在SQLite中不固定大小的细节......) – 2010-12-14 14:02:43

5

由于SQLite uses variable-length records只,我猜他们没有实现固定宽度的查找优化,当行长度相同。

而且正如Dave指出的,人们仍然可以在INT字段中存储文本。由于SQLite never truncates data,这意味着SQLite允许像INT一样固定宽度的列来存储可变长度的数据。所以不可能实现固定宽度的查找优化。