sqlite数据库默认时间值'现在'

是否有可能在一个SQLite数据库craete有一个默认为DATETIME('now')的时间戳列的表?

喜欢这个:

 CREATE TABLE test ( id INTEGER PRIMARY KEY AUTOINCREMENT, t TIMESTAMP DEFAULT DATETIME('now') ); 

这给了一个错误…如何解决?

我相信你可以使用

 CREATE TABLE test ( id INTEGER PRIMARY KEY AUTOINCREMENT, t TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); 

截至版本3.1( 来源 )

根据博士。 在最近的列表posthipp:

 CREATE TABLE whatever( .... timestamp DATE DEFAULT (datetime('now','localtime')), ... ); 

这只是一个语法错误,你需要括号: (DATETIME('now'))

如果您查看文档 ,您会注意到语法中添加在“expr”选项周围的括号。

这是基于对这个问题的其他答案和评论的完整例子。 在这个例子中,时间戳( created_at -column)被保存为unix时代的 UTC时区,只有在必要时才转换为本地时区。

使用unix时间节省存储空间 – 当存储为ISO8601string时,4字节整数与24字节string相比,请参阅数据types 。 如果4个字节不够,可以增加到6或8个字节。

在UTC时区保存时间戳可以方便地在多个时区显示合理的值。

SQLite版本是Ubuntu LTS 14.04附带的3.8.6。

 $ sqlite3 so.db SQLite version 3.8.6 2014-08-15 11:46:33 Enter ".help" for usage hints. sqlite> .headers on create table if not exists example ( id integer primary key autoincrement ,data text not null unique ,created_at integer(4) not null default (strftime('%s','now')) ); insert into example(data) values ('foo') ,('bar') ; select id ,data ,created_at as epoch ,datetime(created_at, 'unixepoch') as utc ,datetime(created_at, 'unixepoch', 'localtime') as localtime from example order by id ; id|data|epoch |utc |localtime 1 |foo |1412097842|2014-09-30 17:24:02|2014-09-30 20:24:02 2 |bar |1412097842|2014-09-30 17:24:02|2014-09-30 20:24:02 

本地时间是正确的,因为我在查询的时刻位于UTC + 2 DST。

这是语法错误,因为你没有写括号

如果你写

selectdate时间('现在'),那么它会给你utc的时间,但如果你这写它的查询,那么你必须在此之前添加括号(datetime('now'))UTC时间。 对于本地时间相同selectdate时间('现在','本地时间')的查询

(date时间( '现在', '本地时间'))

使用REALtypes可能会更好,以节省存储空间。

从1.2部分的数据types引用在SQLite版本3

SQLite没有专门用于存储date和/或时间的存储类。 相反,SQLite的内置date和时间函数能够将date和时间存储为TEXT,REAL或INTEGER值

 CREATE TABLE test ( id INTEGER PRIMARY KEY AUTOINCREMENT, t REAL DEFAULT (datetime('now', 'localtime')) ); 

看到列约束 。

并插入一行而不提供任何价值。

 INSERT INTO "test" DEFAULT VALUES;