Pertama, saya telah menulis tentang ini secara detail sebelumnya, jadi silakan baca jawaban saya di sini dan di sini , serta entri blog ini oleh Lau Taarnskov .
Khusus untuk MySQL, Anda biasanya tidak ingin menggunakan TIMESTAMP
untuk waktu lokal dari acara mendatang, karena akan mengonversi dari zona waktu sesi ke UTC pada waktu tulis, dan mengonversi kembali dari UTC ke zona waktu sesi pada waktu baca. Meskipun ini adalah id zona waktu yang sama (yang tidak harus demikian), tidak ada jaminan bahwa data zona waktu tidak akan berubah untuk satu atau kedua zona waktu antara saat Anda menulis data dan saat peristiwa terjadi.
Sebagai gantinya, gunakan DATETIME
bidang, yang tidak melakukan konversi zona waktu implisit. Anda mendapatkan nilai persis yang Anda tulis. Simpan waktu lokal acara, dan simpan VARCHAR
bidang yang berisi pengidentifikasi zona waktu untuk acara tersebut. Ini adalah satu-satunya cara untuk mempertahankan niat asli pengguna.
Alasan dan kasus tepi semuanya dijelaskan dalam jawaban yang saya berikan sebelumnya.