2010-12-14 87 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一樣固定寬度的列來存儲可變長度的數據。所以不可能實現固定寬度的查找優化。