Nějaké pozadí k sql_mode a 'NO_ZERO_DATE':https:// dev.mysql.com/doc/refman/5.1/en/sql-mode.html
Zmínil jste, že jste obnovili tabulky z jiného serveru. Pokud jste použili mysqldump, pak odpověď na vaši otázku je, že mysql vypnul režim 'NO_ZERO_DATE' při načítání dumpingového SQL. Mysqldump (testováno ve verzi 5.5) umístí tento řádek na začátek výpisu SQL:
/*!40101 SET @example@sqldat.com@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
Při načítání výpisu také vypne kontroly cizích klíčů a další užitečné věci.
/*!40014 SET @example@sqldat.com@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @example@sqldat.com@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
To vysvětluje, proč jste byli schopni obnovit stoly, ale při pokusu o změnu musíte hrát podle přísnějších pravidel. Pokud to opravdu chcete přepsat, můžete těsně před svou alter tabulkou vyzkoušet následující:
mysql> SET SESSION sql_mode='';
Potom změňte tabulku.