Nějaké pozadí k sql_mode a 'NO_ZERO_DATE':http:// 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 @[email protected]@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 @[email protected]@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @[email protected]@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.