यह प्रश्न के अन्य उत्तरों और टिप्पणियों के आधार पर एक पूर्ण उदाहरण है। उदाहरण में टाइमस्टैम्प (created_at
-column) unix epoch यूटीसी टाइमज़ोन के रूप में सहेजा गया है और आवश्यक होने पर केवल स्थानीय टाइमज़ोन में परिवर्तित किया गया है।
यूनिक्स युग का उपयोग भंडारण स्थान बचाता है - 4 बाइट्स पूर्णांक बनाम 24 बाइट स्ट्रिंग ISO8601 स्ट्रिंग के रूप में संग्रहीत करते समय, datatypes देखें। यदि 4 बाइट पर्याप्त नहीं हैं जिन्हें 6 या 8 बाइट तक बढ़ाया जा सकता है।
यूटीसी टाइमज़ोन पर टाइमस्टैम्प सहेजना कई टाइमज़ोन पर उचित मूल्य दिखाने के लिए सुविधाजनक बनाता है।
SQLite संस्करण 3.8.6 है जो उबंटू एलटीएस 14.04 के साथ जहाजों है।
$ 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
लोकलटाइम सही है क्योंकि मैं क्वेरी के पल में यूटीसी + 2 डीएसटी में स्थित हूं।
यदि आप भंडारण आकार के बारे में चिंतित हैं, तो ध्यान दें कि यह नुस्खा आपके टाइमस्टैम्प को आईएसओ -8601 (एक टेक्स्ट प्रारूप) में सहेज लेगा, जो प्रति दिन डेटाबेस में लगभग 24 बाइट लेता है।आप केवल एक INTEGER (4) कॉलम का उपयोग कर स्पेस को सहेज सकते हैं, और "इंसर्ट इंटो टेस्ट (टी) मानों (स्ट्रैटाइम ("% s ", CURRENT_TIME) के माध्यम से यूनिक्स समय को संग्रहीत कर सकते हैं;" – mckoss
@mckoss आपकी टिप्पणी के लिए धन्यवाद, निर्माण कथन बन गया: ... mycolumn डिफ़ॉल्ट (strftime ('% s', 'अब')) – larham1
"... डिफ़ॉल्ट (strftime ('% s', 'अब')) "निरंतर अभिव्यक्ति नहीं है, डिफ़ॉल्ट रूप से काम नहीं करेगा" त्रुटि: कॉलम का डिफ़ॉल्ट मान [...] स्थिर नहीं है "। –