2012-11-25 45 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

是的。 (没有时间的朱利安日期是整数。) –

相关问题