参加这个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;
答案 0 :(得分:3)
typeof('1913-12-23')
返回text
的原因是'1913-12-23'
是一个字符串,并以字符串形式存储在表中。
只有当转换无损时,类型亲和力才会发挥作用;例如,值'123456'
将被转换为数字。
SQLite没有本机日期数据类型。
要允许日期由built-in date functions处理,您必须将它们存储为yyyy-mm-dd
字符串或数字(Julian日数或自Unix时代以来的秒数)。
整数占用的存储空间少于字符串,因此如果数据库的瓶颈是I / O,查询会更快,这很可能。