3

参加这个 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>

为什么日期字段显示为类型文本?如果是数字,存储空间会更小,查询会更快吗?

根据第 2.2 节中的表格, Sqlite3 数据类型文档显示日期列的亲和性是数字。我猜想存储为数值而不是文本的日期字段会占用更少的空间,所以这将是理想的。我很可能还没有很好地掌握 sqlite,所以我的担忧可能是无效的。

为了方便复制/粘贴:

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

1 回答 1

3

typeof('1913-12-23')返回的原因text是它'1913-12-23'是一个字符串,并且作为字符串存储在表中。只有当转换是无损的时,类型关联才会发挥作用;例如,该值'123456'将转换为数字。

SQLite 没有本机日期数据类型。为了让内置日期函数处理日期,您必须将它们存储为yyyy-mm-dd字符串或数字(儒略日数字或自 Unix 纪元以来的秒数)。

整数占用的存储空间比字符串少,因此如果数据库的瓶颈是 I/O,则查询会更快,这很可能。

于 2012-11-25T19:55:32.690 回答