Perbedaan antara format tanggal / waktu yang berbeda dalam ActiveRecord tidak ada hubungannya dengan Rails dan semuanya terkait dengan database apa pun yang Anda gunakan.
Menggunakan MySQL sebagai contoh (jika tidak ada alasan lain karena itu yang paling populer), Anda memiliki DATE
, DATETIME
, TIME
dan TIMESTAMP
jenis data kolom; seperti Anda memiliki CHAR
, VARCHAR
, FLOAT
dan INTEGER
.
Jadi, Anda bertanya, apa bedanya? Yah, beberapa dari mereka cukup jelas. DATE
hanya menyimpan tanggal, TIME
hanya menyimpan waktu, sementara DATETIME
menyimpan keduanya.
Perbedaan antara DATETIME
dan TIMESTAMP
sedikit lebih halus: DATETIME
diformat sebagai YYYY-MM-DD HH:MM:SS
. Rentang yang valid berkisar dari tahun 1000 hingga tahun 9999 (dan semuanya berada di antaranya. Meskipun TIMESTAMP
terlihat serupa ketika Anda mengambilnya dari basis data, ini benar-benar hanya sebuah front untuk cap waktu unix . Rentang validnya berkisar antara 1970 hingga 2038. Perbedaannya di sini, selain dari berbagai fungsi built-in dalam mesin database, adalah ruang penyimpanan. Karena DATETIME
menyimpan setiap digit dalam tahun, bulan, jam, menit, dan kedua, ia menghabiskan total 8 byte. Karena TIMESTAMP
hanya menyimpan nomor detik sejak 1970-01-01, ia menggunakan 4 byte.
Anda dapat membaca lebih lanjut tentang perbedaan antara format waktu di MySQL di sini .
Pada akhirnya, itu tergantung pada apa yang Anda perlu kolom tanggal / waktu Anda lakukan. Apakah Anda perlu menyimpan tanggal dan waktu sebelum tahun 1970 atau setelah 2038? Gunakan DATETIME
. Apakah Anda perlu khawatir tentang ukuran basis data dan Anda berada dalam rentang waktu itu? Gunakan TIMESTAMP
. Apakah Anda hanya perlu menyimpan tanggal? Gunakan DATE
. Apakah Anda hanya perlu menyimpan waktu? Gunakan TIME
.
Setelah mengatakan semua ini, Rails sebenarnya membuat beberapa keputusan untuk Anda . Keduanya :timestamp
dan :datetime
akan default ke DATETIME
, sementara :date
dan :time
sesuai dengan DATE
dan TIME
, masing-masing.
Ini berarti bahwa di dalam Rails, Anda hanya perlu memutuskan apakah Anda perlu menyimpan tanggal, waktu atau keduanya.
TIME
Kolom MySQL bukan sepenuhnya "waktu", karena menerima jam> 24; ini juga dapat digunakan sebagai "waktu berlalu".: datetime (8 bytes)
: cap waktu (4 byte)
sumber
Inilah penjelasan yang luar biasa dan tepat yang saya temukan.
sumber: https://www.dbrnd.com/2015/09/difference-between-datetime-and-timestamp-in-mysql/#:~:text=DATETIME%20vs%20TIMESTAMP%3A ,DATETIME % 20adalah2020 .
Juga...
tabel dengan tipe "tanggal" kolom yang berbeda dan tipe migrasi rel yang sesuai tergantung pada database
sumber