Einige Hintergrundinformationen zu sql_mode und 'NO_ZERO_DATE':http:// dev.mysql.com/doc/refman/5.1/en/sql-mode.html
Sie haben erwähnt, dass Sie die Tabellen von einem anderen Server wiederhergestellt haben. Wenn Sie mysqldump verwendet haben, lautet die Antwort auf Ihre Frage, dass mysql den 'NO_ZERO_DATE'-Modus beim Laden des gedumpten SQL deaktiviert hat. Mysqldump (getestet in 5.5) setzt diese Zeile an den Anfang des gedumpten SQL:
/*!40101 SET @[email protected]@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
Es schaltet auch Fremdschlüsselprüfungen und andere nützliche Dinge aus, während der Speicherauszug geladen wird.
/*!40014 SET @[email protected]@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @[email protected]@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
Dies erklärt, warum Sie die Tische wiederherstellen konnten, aber wenn Sie versuchen, sie zu ändern, müssen Sie nach strengeren Regeln spielen. Wenn Sie dies wirklich überschreiben möchten, können Sie Folgendes direkt vor Ihrer Alter-Tabelle versuchen:
mysql> SET SESSION sql_mode='';
Dann Tabelle ändern.