Beberapa latar belakang pada sql_mode dan 'NO_ZERO_DATE':https:// dev.mysql.com/doc/refman/5.1/en/sql-mode.html
Anda menyebutkan bahwa Anda memulihkan tabel dari server lain. Jika Anda menggunakan mysqldump maka jawaban untuk pertanyaan Anda adalah bahwa mysql mematikan mode 'NO_ZERO_DATE' saat memuat SQL yang dibuang. Mysqldump (diuji pada 5.5) menempatkan baris ini di atas SQL yang dibuang:
/*!40101 SET @example@sqldat.com@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
Ini juga mematikan pemeriksaan kunci asing dan hal-hal berguna lainnya saat memuat dump.
/*!40014 SET @example@sqldat.com@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @example@sqldat.com@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
Ini menjelaskan mengapa Anda dapat memulihkan tabel, tetapi ketika mencoba mengubah Anda harus bermain dengan aturan yang lebih ketat. Jika Anda benar-benar ingin mengganti ini, Anda dapat mencoba yang berikut ini sebelum tabel alter Anda:
mysql> SET SESSION sql_mode='';
Kemudian ubah tabel.