Sepertinya pesan kesalahan Anda berasal dari klien MySQL Anda, bukan dari server. Jadi, menyetel mode ketat server tidak akan membantu Anda menampilkan tanggal ini dengan klien ini.
Sepertinya Anda memiliki beberapa tanggal gaya 2012-09-31 atau 2013-02-29 di data Anda. Mereka diformat dengan benar tetapi sebaliknya salah. Dalam versi MySQL pra 5.0.2 ini tidak tertangkap dengan benar masuk ke data Anda. Sekarang, server Anda, setel ke ALLOW_INVALID_DATES
tidak menyumbatnya, tetapi mengubahnya menjadi '0000-00-00'. Dan klien mengejek mereka.
Langkah pertama Anda untuk membersihkannya adalah dengan mengidentifikasi baris yang menyinggung. Anda bisa mencoba ini.
Pertama, aktifkan ALLOW_INVALID_DATES
Kemudian, jalankan kueri ini untuk melihat-lihat di tabel Anda. Jangan gunakan SELECT *
SELECT col,col,col,DATE_FORMAT(datecol,'%Y-%m-%d')
FROM mytable
ORDER BY DATE_FORMAT(datecol,'%Y-%m-%d')
Cobalah untuk mencari tahu dari kumpulan hasil tanggal mana yang sampah. Mereka mungkin ditempatkan pertama dalam pernyataan pilih ini, tetapi Anda harus sedikit bersusah payah untuk menemukannya.
Selanjutnya, cari tahu bagaimana Anda ingin memperbaikinya. Hapus baris? Ubah tanggal menjadi 1941-12-07 (tanggal yang hidup dalam keburukan)? Kami tidak dapat memberi tahu Anda apa yang perlu Anda lakukan di sini.
Kemudian, perbaiki. Jika hanya ada satu atau dua, perbaiki satu per satu.
UPDATE mytable
SET datecol='whatever replacement date'
WHERE id='the id of the offending row.'
atau
DELETE FROM mytable
WHERE id='the id of the offending row.'
Jika ada ribuan, Anda dapat memperbaikinya secara massal dengan sesuatu seperti ini. Tapi jangan lakukan ini tanpa terlebih dahulu menyelesaikan masalah dengan sangat hati-hati di server pengujian. Jika Anda membuat kesalahan, Anda akan mengotori meja Anda.
UPDATE mytable
SET datecol='whatever replacement date'
WHERE '0000-00-00' = DATE_FORMAT(datecol,'%Y-%m-%d')
Setelah Anda selesai memperbaiki masalah Anda, kembali dan lakukan SELECT *
, untuk memastikan Anda mendapatkan semuanya.
Kemudian nonaktifkan ALLOW_INVALID_DATES
dan jangan pernah mengaktifkannya kembali.
Itu harus membersihkan kekacauan. Perhatikan bahwa data dunia nyata selalu memiliki beberapa baris yang tidak sempurna di dalamnya.