นี่คือตัวอย่างเต็มรูปแบบตามคำตอบและความคิดเห็นอื่น ๆ ของคำถาม ในตัวอย่างการประทับเวลา ( created_at
-column) ถูกบันทึกเป็นเขตเวลาunix epoch UTC และแปลงเป็นเขตเวลาท้องถิ่นเมื่อจำเป็นเท่านั้น
ใช้ยูนิกซ์ยุคประหยัดพื้นที่การจัดเก็บ - 4 ไบต์จำนวนเต็มเมื่อเทียบกับ 24 ไบต์สตริงเมื่อเก็บไว้เป็น ISO8601 สตริงดูประเภทข้อมูล หาก 4 ไบต์ไม่เพียงพอที่สามารถเพิ่มเป็น 6 หรือ 8 ไบต์
การบันทึกเวลาประทับบนเขตเวลา UTC ช่วยให้สามารถแสดงค่าที่เหมาะสมในหลายเขตเวลา
รุ่น SQLite คือ 3.8.6 ที่มาพร้อมกับ Ubuntu LTS 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
เวลาท้องถิ่นถูกต้องเนื่องจากฉันอยู่ที่ UTC + 2 DST ในขณะที่สืบค้น