Penjelasan MySQL DATETIME: Tipe Data, Rentang, dan Praktik Terbaik

1. Apa Itu DATETIME MySQL?

DATETIME MySQL adalah tipe data yang digunakan untuk menyimpan tanggal dan waktu dalam satu kolom. Mengelola nilai tanggal dan waktu dalam basis data sangat penting untuk banyak aplikasi, seperti sistem pencatatan log dan reservasi. Tipe DATETIME menyimpan tanggal dan waktu secara bersamaan dan mendukung rentang nilai yang luas. Rentangnya dari '1000-01-01 00:00:00' hingga '9999-12-31 23:59:59', dan juga mendukung detik pecahan.

2. Ikhtisar Tipe Data Tanggal dan Waktu MySQL

2.1 Tipe Data untuk Menangani Tanggal dan Waktu

MySQL menyediakan tipe data berikut untuk bekerja dengan tanggal dan waktu:

  • DATE : Menyimpan tanggal (tahun, bulan, hari). Rentangnya '1000-01-01' hingga '9999-12-31' .
  • TIME : Hanya menyimpan waktu. Rentangnya '-838:59:59' hingga '838:59:59' .
  • DATETIME : Menyimpan tanggal dan waktu. Rentangnya '1000-01-01 00:00:00' hingga '9999-12-31 23:59:59' .
  • TIMESTAMP : Menyimpan cap waktu UNIX. Rentangnya '1970-01-01 00:00:01' hingga '2038-01-19 03:14:07' .

2.2 Perbedaan Antara DATETIME dan TIMESTAMP

DATETIME dan TIMESTAMP mirip, tetapi memiliki perbedaan berikut:

  • Zona waktu : DATETIME menyimpan nilai tetap yang tidak bergantung pada zona waktu. Sebaliknya, TIMESTAMP dikonversi ke UTC saat disimpan dan dikonversi kembali ke zona waktu server saat diambil. Karena itu, DATETIME cocok untuk nilai tanggal/waktu yang tidak bergantung pada zona waktu (misalnya, waktu acara), sementara TIMESTAMP cocok untuk data yang terkait dengan zona waktu server, seperti log.
  • Format penyimpanan : DATETIME disimpan apa adanya, sedangkan TIMESTAMP disimpan sebagai cap waktu UNIX. Akibatnya, nilai TIMESTAMP dipengaruhi oleh pengaturan zona waktu server saat merepresentasikan waktu.

3. Cara Menggunakan DATETIME di MySQL

3.1 Membuat Kolom DATETIME

Untuk membuat kolom dengan tipe DATETIME, gunakan sintaks SQL berikut:

CREATE TABLE sample_table (
    event_time DATETIME
);

Pada contoh ini, kolom DATETIME bernama event_time dibuat dalam tabel yang disebut sample_table.

3.2 Menyisipkan Nilai DATETIME

Nilai DATETIME MySQL dapat disisipkan dalam berbagai format. Format dasar adalah 'YYYY-MM-DD HH:MM:SS'. Contohnya:

INSERT INTO sample_table (event_time) VALUES ('2024-09-16 14:30:00');

Format berikut juga diperbolehkan:

  • 'YY-MM-DD HH:MM:SS' : Format yang menggunakan tahun 2 digit.
  • 'YYYYMMDDHHMMSS' : Format tanpa pemisah.

Contoh:

INSERT INTO sample_table (event_time) VALUES ('24-09-16 14:30:00');
INSERT INTO sample_table (event_time) VALUES (20240916143000);

Data yang disisipkan dalam format ini akan disimpan dengan benar. Jika tahun ditulis dengan dua digit, '70-99' akan diubah menjadi 1970-1999, dan '00-69' akan diubah menjadi 2000-2069.

3.3 Mengambil Nilai DATETIME

Saat mengambil nilai DATETIME, MySQL menampilkannya dalam format default 'YYYY-MM-DD HH:MM:SS'. Contohnya:

SELECT event_time FROM sample_table;

Kueri ini menampilkan nilai pada kolom DATETIME menggunakan format standar.

4. Bekerja dengan Detik Pecahan

4.1 Presisi DATETIME

Di MySQL, nilai DATETIME dapat menyertakan detik pecahan. Anda dapat menentukan presisi menggunakan opsi fsp, yang memungkinkan penyimpanan detik pecahan dari 0 hingga 6 digit. Misalnya, untuk membuat kolom dengan 3 digit detik pecahan:

CREATE TABLE precise_times (
    event_time DATETIME(3)
);

Pada contoh ini, kolom event_time dapat menyimpan detik pecahan hingga 3 digit.

4.2 Menyisipkan Nilai dengan Detik Pecahan

Untuk menyisipkan nilai DATETIME yang mencakup detik pecahan, gunakan yang berikut:

INSERT INTO precise_times (event_time) VALUES ('2024-09-16 14:30:00.123');

Query ini menyimpan nilai termasuk detik pecahan secara akurat. Bagian pecahan disimpan tanpa dipotong, dan presisi dipertahankan saat nilai diambil kembali.

5. Praktik Terbaik untuk DATETIME

5.1 Memilih Antara DATETIME dan TIMESTAMP

  • Kapan menggunakan DATETIME : Untuk nilai tanggal/waktu tetap yang tidak bergantung pada zona waktu (misalnya, waktu mulai acara atau tanggal reservasi).
  • Kapan menggunakan TIMESTAMP : Untuk data tanggal/waktu yang terkait dengan zona waktu server (misalnya, cap waktu pembuatan atau pembaruan catatan).

5.2 Manajemen Zona Waktu

Karena DATETIME tidak menyimpan informasi zona waktu, aplikasi Anda harus mengelola zona waktu secara terpisah. Sebaliknya, TIMESTAMP secara otomatis memperhitungkan zona waktu server saat menyimpan dan mengambil nilai, sehingga cocok untuk sistem yang beroperasi di berbagai zona waktu di seluruh dunia.

6. Kesalahan Umum dan Cara Menghindarinya

6.1 Tanggal Nol dan Nilai Tidak Valid

Di MySQL, jika Anda mencoba menyisipkan nilai DATETIME yang tidak valid, tanggal nol seperti '0000-00-00 00:00:00' dapat disimpan. Karena ini umumnya bukan tanggal yang sah, Anda harus memvalidasi data masukan untuk mencegah nilai tidak valid disisipkan. Menerapkan validasi yang memastikan masukan mengikuti rentang dan format yang benar dapat membantu mencegah tanggal nol tersimpan.

6.2 Penyalahgunaan Presisi

Saat menentukan presisi detik pecahan, menggunakan presisi yang salah dapat menghasilkan hasil yang tidak terduga. Hanya atur presisi detik pecahan bila diperlukan, dan pilih nilai fsp dengan hati‑hati. Misalnya, jika aplikasi Anda tidak memerlukan presisi sub‑detik, Anda tidak perlu menambahkan detik pecahan ke kolom DATETIME.

7. Ringkasan

Dalam artikel ini, kami menjelaskan tipe DATETIME MySQL secara detail. DATETIME adalah tipe data yang sangat berguna untuk menyimpan baik tanggal maupun waktu, dan cocok ketika Anda perlu menyimpan nilai yang tidak dipengaruhi oleh zona waktu. Dengan memahami perbedaan antara DATETIME dan TIMESTAMP, cara kerja zona waktu, serta cara menggunakan detik pecahan, Anda dapat mengelola data tanggal/waktu lebih efektif di basis data Anda. Selain itu, mengetahui kesalahan umum dan cara menghindarinya membantu menjaga konsistensi dan keandalan data.

8. Pertanyaan yang Sering Diajukan (FAQ)

Q1: Apa perbedaan utama antara DATETIME dan TIMESTAMP?

DATETIME menyimpan tanggal dan waktu tetap yang tidak bergantung pada zona waktu. Misalnya, cocok untuk menyimpan tanggal reservasi atau waktu acara yang harus tetap sama di semua zona waktu. Sebaliknya, TIMESTAMP disimpan dalam UTC dan dikonversi ke zona waktu server saat diambil. Ini cocok untuk data tanggal/waktu yang bergantung pada zona waktu server, seperti log.

Q2: Bagaimana cara menyimpan detik pecahan dengan DATETIME?

Anda dapat mengatur presisi detik pecahan dengan menentukan nilai fsp saat membuat kolom DATETIME. Misalnya, DATETIME(3) menyimpan detik pecahan hingga 3 digit. Gunakan nilai yang diformat dengan benar termasuk detik pecahan saat menyisipkan, dan nilai tersebut akan disimpan dengan tepat.

Q3: Haruskah saya menggunakan DATETIME atau TIMESTAMP?

Itu tergantung pada kasus penggunaan Anda. Gunakan DATETIME ketika Anda ingin menyimpan tanggal dan waktu yang tetap. Gunakan TIMESTAMP untuk data tanggal/waktu yang dipengaruhi oleh zona waktu server, seperti waktu pembuatan atau pembaruan catatan. Karena TIMESTAMP melakukan konversi zona waktu secara otomatis, ia cocok ketika sistem Anda harus beroperasi di berbagai zona waktu.