2012-11-25 46 views
3

文字親和力藉此sqlite3的交互式會話:TYPEOF日期字段顯示sqlite3的

sqlite> create table d(t date); 
sqlite> insert into d values('1913-12-23'); 
sqlite> select t,typeof(t) from d; 
1913-12-23|text 
sqlite> 

爲什麼日期字段顯示爲文本類型?如果存儲空間數值較小,查詢速度會更快嗎?

Sqlite3 datatype documentation顯示根據§2.2中的表格,日期列的相關性是數字。我猜想,將日期字段存儲爲數值而不是文本會佔用更少的空間,所以這將是理想的。我可能還沒有很好地掌握sqlite,所以我的擔心可能是無效的。

爲了便於複製/粘貼:

create table d(t date); 
insert into d values('1913-12-23'); 
select t,typeof(t) from d; 

回答

3

之所以typeof('1913-12-23')回報text'1913-12-23'是一個字符串,並存儲在該表爲一個字符串。 僅當轉換無損時,類型親和纔會發揮作用;例如,值'123456'將被轉換成數字。

SQLite沒有本機日期數據類型。 要允許日期由built-in date functions處理,您必須將它們存儲爲yyyy-mm-dd字符串或數字(Julian日數或自Unix紀元以來的秒數)。

整數比字符串佔用的存儲空間更少,因此如果數據庫的瓶頸是I/O(可能是瓶頸),則查詢速度會更快。

+0

謝謝!那麼,你是否建議我將Epoch時間存儲爲int或Julian日期作爲...某事,然後呢? – kzh

+0

是的。 (沒有時間的朱利安日期是整數。) –

相關問題