Bu soruya diğer cevaplar ve açıklamalara dayanarak tam bir örnektir. Örnekte, zaman damgası (created_at
-kodlama), unix epoch UTC saat dilimi olarak kaydedilir ve yalnızca gerektiğinde yerel saat dilimine dönüştürülür. 24 bayt dize vs 4 bayt tamsayı ISO8601 dizesi olarak saklandığında, datatypes bakınız - Unix Zaman Kullanımı
depolama alanı kazandırır. 4 bayt yeterli değilse, 6 veya 8 bayta arttırılabilir.
UTC zaman dilimi üzerinde zaman damgasının kaydedilmesi, çok sayıda saat dilimi üzerinde makul bir değer göstermeyi kolaylaştırır.
SQLite sürümü Ubuntu LTS 14.04 ile 3.8.6 olduğu gemi olduğunu.
$ 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
Bulunduğunda, UTC + 2 DST adresinde bulunduğum şekliyle doğrudur. Depolama boyutu ile ilgili endişeleriniz varsa
, bu tarifi tarihinden başına veritabanında yaklaşık 24 bayt kaplıyor, ISO-8601 (bir metin formatı) da damgaları kurtaracak unutmayın." "(CURRENT_TIME) yalnızca bir tamsayı (4) kolonu kullanılarak ve% s teste (t) değerlerinin strftime();" INSERT" üzerinden UNIX zaman depolayarak yer tasarruf Yorumunuza teşekkür @mckoss – mckoss
oluşturmak ifadesi oldu: ... Sütunum default (strftime ('% s', 'şimdi')) – larham1
..." varsayılan (strftime ('% s', 'şimdi')) Error "sabit ifade değil, varsayılan vererek işe yaramaz ': sütunun varsayılan değer [...]' sabit değildir. –