Kesalahan ini karena mode sql yang bisa menjadi mode ketat sesuai dokumentasi MYSQL 5.7 terbaru
Mode ketat memengaruhi apakah server mengizinkan '0000-00-00' sebagai tanggal yang valid:Jika mode ketat tidak diaktifkan, '0000-00-00' diizinkan dan sisipan tidak menghasilkan peringatan. Jika mode ketat diaktifkan, '0000- 00-00' tidak diizinkan dan sisipan menghasilkan kesalahan, kecuali IGNORE juga diberikan. 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 hak istimewa super dan ini memengaruhi operasi yang terhubung dengan semua klien sejak saat itu
jika di atas tidak berfungsi, buka /etc/mysql/my.cnf
(sesuai ubuntu) dan beri komentar STRICT_TRANS_TABLES
Juga, jika Anda ingin menyetel mode sql secara permanen saat startup server, maka sertakan SET sql_mode=''
di my.cnf
di Linux atau MacOS. Untuk windows ini harus dilakukan di my.ini
berkas.
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 untuk menyimpan nilai "nol" dari '0000-00-00' sebagai "tanggal dummy." 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.
PERBARUI
Mengenai masalah bug seperti yang dikatakan oleh @Dylan-Su:
Saya tidak berpikir ini adalah bug karena cara MYSQL berkembang dari waktu ke waktu karena beberapa hal diubah berdasarkan peningkatan lebih lanjut dari produk.
Namun saya memiliki laporan bug terkait lainnya mengenai NOW()
fungsi
Bidang tanggal 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 secara otomatis diinisialisasi dan diperbarui ke tanggal dan waktu saat ini (yaitu, stempel waktu saat ini). Sebelum 5.6.5, ini berlaku hanya untuk TIMESTAMP, dan untuk paling banyak 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 sebelumnya 5.6.5.
Pembaruan Mengenai NO_ZERO_DATE
Pada MySQL pada 5.7.4, mode ini tidak digunakan lagi. Untuk versi sebelumnya Anda harus mengomentari baris masing-masing di file konfigurasi. Lihat dokumentasi MySQL 5.7 pada NO_ZERO_DATE