Fahmi's Blog

Cara Mengatasi Incorrect datetime value: '0000-00-00 00:00:00' pada Database MySQL

Published 5 months ago in MySQL 2 min read
image

Pada database MySQL versi lama, seringkali kita temui ada kolom tertentu misalnya date_created atau created_date yang berisi tipe data datetime NOT NULL tapi terisi value 0000-00-00 00:00:00. Hal tersebut juga berlaku untuk tipe data date yang ternyata isiannya 000-00-00.

Kedua value tersebut meskipun formatnya benar tapi merupakan isian yang tidak valid untuk sebuah tanggal dan waktu. Seharusnya jika memang value tersebut kosong, lebih baik diisikan sebagai NULL.

Permasalahan Migrasi ke Server Database Lain yang Beda Versi

Ketika melakukan migrasi database ke server lain yang lebih baru, ternyata database tersebut tidak langsung bisa diimport ke DB baru.

Hal ini karena, ternyata di database yang lain tidak bisa menerima isian 0000-00-00 00:00:00.

Permasalahan ini sebenarnya masih berkaitan dengan SQL Mode yang ternyata berisi NO_ZERO_DATE dan NO_ZERO_IN_DATE. Jika pada SQL Mode kita menghilangkan dua pengaturan tersebut, semestinya bisa masuk, meskipun solusi tersebut bukanlah solusi yang baik jika dilihat dari kualitas data yang disimpan. 

Mengecek record yang salah:

SELECT * FROM `user` WHERE last_login LIKE '%000%';

Mencoba UPDATE tetapi tidak berhasil:

UDPATE user SET last_login = NULL WHERE last_login ='0000-00-00 00:00:00';

Syntax untuk membetulkan tanpa mengubah SQL Mode adalah:

UPDATE user
SET last_login = NULL
WHERE CAST(last_login AS CHAR) = '0000-00-00 00:00:00';

Atau, bisa juga dengan memanfaatkan LIKE agar tidak terkena validasi tanggal MariaDB

UPDATE user
SET last_login = NULL
WHERE last_login LIKE '0000-00-00%';

Sebelum melakukan proses di atas, pastikan melakukan backup terlebih dahulu agar jika terjadi kesalahan, data aslinya masih tersedia.