Kesalahannya karena mode sql yang dapat menjadi mode ketat sesuai dokumentasi MYSQL 5.7 terbaru
Dokumentasi MySQL 5.7 mengatakan :
Mode ketat memengaruhi apakah server mengizinkan '0000-00-00' sebagai tanggal yang valid: Jika mode ketat tidak diaktifkan, '0000-00-00' diizinkan dan penyisipan tidak menghasilkan peringatan. Jika mode ketat diaktifkan, '0000-00-00' tidak diizinkan dan sisipan menghasilkan kesalahan, kecuali IGNORE diberikan juga. Untuk INSERT IGNORE dan UPDATE IGNORE, '0000-00-00' diizinkan dan sisipan menghasilkan peringatan.
Untuk memeriksa mode MYSQL
SELECT @@GLOBAL.sql_mode global, @@SESSION.sql_mode session
Menonaktifkan mode STRICT_TRANS_TABLES
Namun untuk mengizinkan format 0000-00-00 00:00:00
Anda harus menonaktifkan mode STRICT_TRANS_TABLES di file konfigurasi mysql atau dengan perintah
Dengan perintah
SET sql_mode = '';
atau
SET GLOBAL sql_mode = '';
Menggunakan kata kunci GLOBAL
membutuhkan super previliges dan itu mempengaruhi operasi yang terhubung dengan semua klien sejak saat itu
jika di atas tidak berfungsi daripada pergi ke /etc/mysql/my.cnf
(sesuai ubuntu) dan beri komentarSTRICT_TRANS_TABLES
Juga, jika Anda ingin mengatur mode sql secara permanen saat startup server, sertakan SET sql_mode=''
di my.cnf
Linux atau MacOS. Untuk windows ini harus dilakukan dalam my.ini
file.
Catatan
Namun mode ketat tidak diaktifkan secara default di MYSQL 5.6. Oleh karena itu tidak menghasilkan kesalahan sesuai dokumentasi MYSQL 6 yang mengatakan
MySQL mengizinkan Anda menyimpan nilai "nol" dari '0000-00-00' sebagai "tanggal palsu". Ini dalam beberapa kasus lebih nyaman daripada menggunakan nilai NULL, dan menggunakan lebih sedikit data dan ruang indeks. Untuk melarang '0000-00-00', aktifkan mode SQL NO_ZERO_DATE.
MEMPERBARUI
Mengenai masalah bug seperti yang dikatakan oleh @ Dylan-Su:
Saya tidak berpikir ini adalah bug karena cara MYSQL berevolusi dari waktu ke waktu karena beberapa hal diubah berdasarkan peningkatan produk lebih lanjut.
Namun saya memiliki laporan bug terkait lainnya terkait NOW()
fungsi tersebut
Bidang tanggal waktu tidak menerima default SEKARANG ()
Catatan Berguna lainnya [lihat Inisialisasi dan Pembaruan Otomatis untuk TIMESTAMP dan DATETIME ]
Pada MySQL 5.6.5, kolom TIMESTAMP dan DATETIME dapat diinisialisasi dan diperbarui secara otomatis ke tanggal dan waktu saat ini (yaitu, stempel waktu saat ini). Sebelum 5.6.5, ini hanya berlaku untuk TIMESTAMP, dan paling banyak untuk satu kolom TIMESTAMP per tabel. Catatan berikut pertama-tama menjelaskan inisialisasi dan pembaruan otomatis untuk MySQL 5.6.5 dan yang lebih baru, kemudian perbedaan untuk versi sebelum 5.6.5.
Pembaruan Mengenai NO_ZERO_DATE
Pada MySQL mulai 5.7.4, mode ini sudah tidak digunakan lagi. Untuk versi sebelumnya Anda harus mengomentari baris masing-masing di file konfigurasi. Lihat dokumentasi MySQL 5.7 pada NO_ZERO_DATE
NULL
.