Apakah mungkin dalam database sqlite untuk membuat tabel yang memiliki kolom stempel waktu yang standarnya DATETIME('now')
?
Seperti ini:
CREATE TABLE test (
id INTEGER PRIMARY KEY AUTOINCREMENT,
t TIMESTAMP DEFAULT DATETIME('now')
);
Ini memberikan kesalahan ... Bagaimana mengatasinya?
menurut dr. hipp di posting daftar terbaru:
sumber
CURRENT_TIMESTAMP
jadi saya membuat fungsi saya sendiri di C untuk mengembalikan jumlah mikrodetik sejak Zaman, dan saya senang saya bisa menggunakannya sebagaiDEFAULT
sekarang.Itu hanya kesalahan sintaksis, Anda perlu tanda kurung:
(DATETIME('now'))
Jika Anda melihat dokumentasi , Anda akan mencatat tanda kurung yang ditambahkan di sekitar opsi 'expr' dalam sintaksis.
sumber
Ini adalah contoh lengkap berdasarkan jawaban dan komentar lain untuk pertanyaan itu. Dalam contoh cap waktu (
created_at
-kolom) disimpan sebagai zona waktu UTC unix epoch dan dikonversi ke zona waktu lokal hanya bila diperlukan.Menggunakan unix epoch menghemat ruang penyimpanan - bilangan bulat 4 byte vs 24 byte saat disimpan sebagai string ISO8601, lihat tipe data . Jika 4 byte tidak cukup yang dapat ditingkatkan menjadi 6 atau 8 byte.
Menyimpan stempel waktu di zona waktu UTC memudahkan untuk menampilkan nilai yang masuk akal pada beberapa zona waktu.
Versi SQLite adalah 3.8.6 yang disertakan bersama Ubuntu LTS 14.04.
Localtime sudah benar karena saya berlokasi di UTC + 2 DST pada saat permintaan.
sumber
Mungkin lebih baik menggunakan tipe REAL, untuk menghemat ruang penyimpanan.
Kutipan dari 1.2 bagian Datatypes Dalam SQLite Versi 3
lihat kendala kolom .
Dan masukkan baris tanpa memberikan nilai apa pun.
sumber
integer(n)
mana orang dapat memilih nilai yang cocok untukn
.Ini adalah kesalahan sintaksis karena Anda tidak menulis tanda kurung
jika kamu menulis
(datetime ('now', 'localtime'))
sumber
Contoh alternatif ini menyimpan waktu lokal sebagai Integer untuk menghemat 20 byte. Pekerjaan dilakukan di bidang default, Perbarui-memicu, dan Lihat. strftime harus menggunakan '% s' (tanda kutip tunggal) karena "% s" (tanda kutip ganda) melemparkan kesalahan 'Tidak Konstan' pada saya.
sumber