Trochę informacji o sql_mode i 'NO_ZERO_DATE':https:// dev.mysql.com/doc/refman/5.1/en/sql-mode.html
Wspomniałeś, że przywróciłeś tabele z innego serwera. Jeśli użyłeś mysqldump, to odpowiedź na twoje pytanie jest taka, że mysql wyłączył tryb 'NO_ZERO_DATE' podczas ładowania zrzuconego SQL. Mysqldump (testowane w 5.5) umieszcza tę linię na górze zrzuconego kodu SQL:
/*!40101 SET @example@sqldat.com@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
Wyłącza również sprawdzanie kluczy obcych i inne przydatne rzeczy podczas ładowania zrzutu.
/*!40014 SET @example@sqldat.com@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @example@sqldat.com@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
To wyjaśnia, dlaczego udało Ci się przywrócić stoły, ale próbując je zmienić, musisz grać według surowszych zasad. Jeśli naprawdę chcesz to zmienić, możesz spróbować wykonać następujące czynności tuż przed tabelą alter:
mysql> SET SESSION sql_mode='';
Następnie zmień tabelę.