Saya memiliki perspektif yang sedikit berbeda tentang perbedaan antara datetime dan TIMESTAMP . A DATETIME menyimpan nilai literal dari tanggal dan waktu tanpa referensi ke zona waktu tertentu. Jadi, saya dapat menetapkan kolom DATETIME ke nilai seperti '2019-01-16 12:15:00' untuk menunjukkan secara tepat kapan ulang tahun terakhir saya terjadi . Apakah ini Waktu Standar Timur? Waktu Standar Pasifik? Siapa tahu? Di mana zona waktu server saat ini ikut bermain terjadi ketika Anda menetapkan DATETIME kolom ke beberapa nilai seperti SEKARANG () . Nilai yang disimpan akan menjadi tanggal dan waktu saat ini menggunakan zona waktu saat ini berlaku. Tapi begitu DATETIME kolom telah diset, itu akan menampilkan yang sama terlepas dari apa zona waktu saat ini. A TIMESTAMP kolom di sisi lain mengambil nilai '2019-01-16 12:15:00' yang Anda tetapkan ke dalamnya dan menafsirkannya dalam arus zona waktu untuk menghitung representasi internal relatif ke 1/1/1970 00:00:00 UTC. Ketika kolom ditampilkan, itu akan dikonversi kembali untuk tampilan berdasarkan apa pun zona waktu saat ini. Adalah fiksi berguna untuk memikirkan cap waktu mengambil nilai yang Anda atur dan mengonversinya dari zona waktu saat ini ke UTC untuk disimpan dan kemudian mengubahnya kembali ke zona waktu saat ini untuk ditampilkan. Jika server saya ada di San Francisco tetapi saya menjalankan sebuah acara di New York yang dimulai pada 9/1/1029 pukul 20:00, saya akan menggunakan TIMESTAMP = kolom untuk menahan waktu mulai, atur zona waktu ke 'Amerika/New York' dan atur waktu mulai ke '2009-09-01 20:00:00'. Jika saya ingin tahu apakah acara telah terjadi atau belum, terlepas dari pengaturan zona waktu saat ini saya dapat membandingkan waktu mulai dengan SEKARANG (). Tentu saja, untuk menampilkan dengan cara yang berarti kepada pelanggan perspektif, saya akan perlu mengatur zona waktu yang benar. Jika saya tidak perlu melakukan perbandingan waktu, maka saya mungkin akan lebih baik hanya menggunakan --- DATETIME kolom, yang akan ditampilkan dengan benar (dengan waktu EST tersirat zona) terlepas dari apa zona waktu server saat ini. Tergantung pada aplikasi, sungguh. Pertimbangkan untuk menetapkan stempel waktu oleh pengguna ke server di New York, untuk janji temu di Sanghai. Sekarang ketika pengguna terhubung di Sanghai, ia mengakses cap waktu janji temu yang sama dari server cermin di Tokyo. Dia akan melihat penunjukan di waktu Tokyo, diimbangi dari waktu New York yang asli. Jadi untuk nilai-nilai yang mewakili waktu pengguna seperti janji temu atau jadwal, datetime lebih baik. Ini memungkinkan pengguna untuk mengontrol tanggal dan waktu persis yang diinginkan, terlepas dari pengaturan server. Waktu yang disetel adalah waktu yang disetel, tidak terpengaruh oleh zona waktu server, zona waktu pengguna, atau oleh perubahan cara penghitungan daylight saving time (ya itu memang berubah). Di sisi lain, untuk nilai yang mewakili waktu sistem seperti transaksi pembayaran, modifikasi tabel atau pencatatan, selalu gunakan cap waktu. Sistem tidak akan terpengaruh dengan memindahkan server ke zona waktu lain, atau saat membandingkan antara server di zona waktu yang berbeda. Stempel waktu juga lebih ringan pada basis data dan diindeks lebih cepat.
Setelah membahas tipe data string dan integer kali ini penulis akan membahas mengenai tipe data date (tanggal) pada mysql. Tipe data date digunakan untuk menyimpan data dengan format tanggal dan waktu dimana pada tipe data date sendiri ada beberapa tipe, seperti pada tabel berikut:
Bentuk umum / format date untuk mendefinisikan kolom dengan tipe data date, time, year, dan datetime adalah sebagai berikut:
Sementara bentuk umum / format untuk menyimpan data tanggal dan waktu terkini pada kolom dengan tipe data date, time, year dan datetime adalah sebagai berikut:
Pada contoh diatas penggunaan now() adalah untuk menyimpan data tanggal dan waktu berdasarkan waktu saat ini, selain now kita juga bisa menggunakan perintah curdate dan curtime. Lalu apa bedanya penggunaan now() dan curdate()? Untuk menjawab hal tersebut dapat melihat hasilnya sebagai berikut: select * from tanggal +------------+---------+----------+---------------------+ | kolom_1 | kolom_2 | kolom_3 | kolom_4 | +------------+---------+----------+---------------------+ | 2021-04-24 | 2021 | 08:06:06 | 2021-04-24 08:06:06 | | 2021-04-24 | 2021 | 08:06:09 | 2021-04-24 08:06:09 | | 2021-04-24 | 2021 | 00:00:00 | 2021-04-24 00:00:00 | +------------+---------+----------+---------------------+ 3 rows in set 0.000 secPerbedaan antara fungsi now() dan curdate() yaitu terletak pada waktu, dimana fungsi now() dapat menyimpan tanggal dan waktu, sementara curdate() hanya menyimpan data tanggal saja, untuk itu kita bisa menggunakan curtime jika hanya ingin menyimpan data waktu saja. Pada penggunaan now(), curdate() dan curtime() perlu di akhiri dengan tanda kurung buka-tutup. Selain itu mysql juga menyediakan perintah sinonim / persamaan fungsi dengan now, curdate dan curtime, yakni:
Selain menggunakan fungsi now() dan current, kita juga dapat menyimpan data tanggal dan waktu di mysql berdasarkan tanggal / waktu tertentu seperti berikut ini: insert into tanggal values ("1995-05-05", "1995", "13:19:20", "1995-12-25 13:19:20") 1 row(s) affected 0.000 sec insert into tanggal values (str_to_date("25-05-1995", "%d-%m-%Y"), "1995", "13:19:20", "1995-12-25 13:19:20") 1 row(s) affected 0.016 sec select * from tanggal; +------------+---------+----------+---------------------+ | kolom_1 | kolom_2 | kolom_3 | kolom_4 | +------------+---------+----------+---------------------+ | 2021-04-24 | 2021 | 08:06:06 | 2021-04-24 08:06:06 | | 2021-04-24 | 2021 | 08:06:09 | 2021-04-24 08:06:09 | | 2021-04-24 | 2021 | 00:00:00 | 2021-04-24 00:00:00 | | 1995-05-05 | 1995 | 13:19:20 | 1995-12-25 13:19:20 | | 1995-05-25 | 1995 | 13:19:20 | 1995-12-25 13:19:20 | +------------+---------+----------+---------------------+ 5 rows in set (0.00 sec)Pada contoh diatas kita dapat menggunakan fungsi str_to_date yakni berfungsi untuk merubah format tanggal yang di input sesuai dengan yang diinginkan namun data yang tersimpan masih tetap dengan format default. Lalu bagaimana jika ingin menampilkan data tanggal pada mysql dengan format tertentu seperti dengan format d-m-Y atau hari-bulan-tahun? Berikut ini format dan contohnya: select date_format(nama_kolom, ekspresi) from nama_tabel; mysql> select date_format (kolom_1, "%d %M, %Y") as K1, kolom_2, kolom_3, date_format (kolom_4, "%d %M, %Y %H:%i:%s WIB") as K4 from tanggal; +----------------+---------+----------+--------------------------------+ | K1 | kolom_2 | kolom_3 | K4 | +----------------+---------+----------+--------------------------------+ | 24 April, 2021 | 2021 | 08:06:06 | 24 April, 2021 08:06:06 WIB | | 24 April, 2021 | 2021 | 08:06:09 | 24 April, 2021 08:06:09 WIB | | 24 April, 2021 | 2021 | 00:00:00 | 24 April, 2021 00:00:00 WIB | | 05 May, 1995 | 1995 | 13:19:20 | 25 December, 1995 13:19:20 WIB | | 25 May, 1995 | 1995 | 13:19:20 | 25 December, 1995 13:19:20 WIB | +----------------+---------+----------+--------------------------------+ 5 rows in set (0.00 sec) select date_format (kolom_1, "%W, %d %M, %Y") as K1, kolom_2, kolom_3, date_format (kolom_4, "%d %M, %Y %H:%i:%s WIB") as K4 from tanggal; +--------------------------+---------+----------+--------------------------------+ | K1 | kolom_2 | kolom_3 | K4 | +--------------------------+---------+----------+--------------------------------+ | Saturday, 24 April, 2021 | 2021 | 08:06:06 | 24 April, 2021 08:06:06 WIB | | Saturday, 24 April, 2021 | 2021 | 08:06:09 | 24 April, 2021 08:06:09 WIB | | Saturday, 24 April, 2021 | 2021 | 00:00:00 | 24 April, 2021 00:00:00 WIB | | Friday, 05 May, 1995 | 1995 | 13:19:20 | 25 December, 1995 13:19:20 WIB | | Thursday, 25 May, 1995 | 1995 | 13:19:20 | 25 December, 1995 13:19:20 WIB | +--------------------------+---------+----------+--------------------------------+ 5 rows in set (0.00 sec)Dari contoh diatas kita tidak dapat menggunakan perintah select * from sehingga harus memilih data pada kolom mana yang ingin diubah formatnya, selain itu kita juga dapat menampilkan data berdasarkan tanggal tertentu dengan mengganti kolom_1 dengan tertentu menggunakan format tanggal default yaitu tahun-bulan-tanggal seperti "1995-12-23" serta merubah format tanggal yang diinginkan dengan mengganti ekspresi yang di apit oleh tanda petik dua semisal menjadi "%d-%m-%Y". Dari contoh diatas juga masih menggunakan format inggris, lalu bagaimana jika ingin merubah dan membuat format tanggal default mysql menjadi format tanggal indonesia? Berikut ini caranya: set lc_time_names = "id_ID"; Query OK, 0 rows affected (0.04 sec) select date_format (kolom_1, "%W, %d %M, %Y") as K1, kolom_2, kolom_3, date_format (kolom_4, "%d %M, %Y %H:%i:%s WIB") as K4 from tanggal; +-----------------------+---------+----------+--------------------------------+ | K1 | kolom_2 | kolom_3 | K4 | +-----------------------+---------+----------+--------------------------------+ | Sabtu, 24 April, 2021 | 2021 | 08:06:06 | 24 April, 2021 08:06:06 WIB | | Sabtu, 24 April, 2021 | 2021 | 08:06:09 | 24 April, 2021 08:06:09 WIB | | Sabtu, 24 April, 2021 | 2021 | 00:00:00 | 24 April, 2021 00:00:00 WIB | | Jumat, 05 Mei, 1995 | 1995 | 13:19:20 | 25 Desember, 1995 13:19:20 WIB | | Kamis, 25 Mei, 1995 | 1995 | 13:19:20 | 25 Desember, 1995 13:19:20 WIB | +-----------------------+---------+----------+--------------------------------+ 5 rows in set (0.00 sec)Dari contoh diatas untuk menampilkan data dengan format tanggal dan waktu indonesia adalah dengan mengeksekusi query set lc_time_names = "id_ID"; terlebih dahulu yang berfungsi untuk merubah zona waktu lokal server dengan begitu kita dapat menampilkan data dengan format waktu indonesia namun akan kembali ke pengaturan default menggunakan format inggris setiap kali menutup terminal / command line, sementara perintah yang digunakan untuk memeriksa zona waktu yang digunakan server adalah select @@lc_time_names;. Berikut ini adalah sejumlah parameter ekspresi yang dapat digunakan untuk menampilkan data tanggal dan waktu pada mysql:
TIMESTAMP() dan CURRENT_TIMESTAMP Tipe data date pada mysql juga menyediakan tipe data timestamp dengan atribut current_timestamp untuk menginput maupun memperbaharui data tanggal dan waktu secara otomatis dimana biasanya digunakan sebagai penanda, contohnya seperti berikut: create table tanggal (id int, timestem timestamp not null default current_timestamp, timestem2 timestamp not null default current_timestamp on update current_timestamp) 0 row(s) affected 0.046 sec insert into tanggal (id) values (1), (2), (3) 3 row(s) affected Records: 3 Duplicates: 0 Warnings: 0 0.016 sec select * from tanggal; +------+---------------------+---------------------+ | id | timestem | timestem2 | +------+---------------------+---------------------+ | 1 | 2021-04-24 08:14:08 | 2021-04-24 08:14:08 | | 2 | 2021-04-24 08:14:08 | 2021-04-24 08:14:08 | | 3 | 2021-04-24 08:14:08 | 2021-04-24 08:14:08 | +------+---------------------+---------------------+ 3 rows in set (0.00 sec) update tanggal set id = 5 where id = 1 Query OK, 1 row affected (0.17 sec) Rows matched: 1 Changed: 1 Warnings: 0 select * from tanggal; +------+---------------------+---------------------+ | id | timestem | timestem2 | +------+---------------------+---------------------+ | 5 | 2021-04-24 08:14:08 | 2021-04-24 08:14:25 | | 2 | 2021-04-24 08:14:08 | 2021-04-24 08:14:08 | | 3 | 2021-04-24 08:14:08 | 2021-04-24 08:14:08 | +------+---------------------+---------------------+ 3 rows in set (0.00 sec)Untuk menggunakan timestamp sehingga dapat menginput data tanggal dan waktu secara otomatis maka perlu menggunakan atribut not null dan default selain itu jika ingin memperbaharui data tanggal dan waktu secara otomatis saat memodifikasi data maka diperlukan atribut on update. Biasanya contoh paling umum penggunaan time_stamp adalah saat membuat user baru pada sebuah aplikasi yang tengah dikembangkan, dengan menyimpan data registrasi dan menyimpan data saat terakhir kali melakukan perubahan informasi dari akun user. Sampai disini pembahasan tipe data date pada mysql sudah selesai, jika ada pertanyaan, jangan sungkan untuk bertanya melalui kolom komentar. Untuk mempelajari pembahasan lainnya silahkan lihat daftar isi melalui menu Programming > MySQL > Daftar Isi belajar MySQL.
|