Малко информация относно sql_mode и „NO_ZERO_DATE“:http:// dev.mysql.com/doc/refman/5.1/en/sql-mode.html
Споменахте, че сте възстановили таблиците от друг сървър. Ако сте използвали mysqldump, тогава отговорът на въпроса ви е, че mysql е изключил режима „NO_ZERO_DATE“, докато зарежда изхвърления SQL. Mysqldump (тестван в 5.5) поставя този ред в горната част на изхвърления SQL:
/*!40101 SET @[email protected]@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
Той също така изключва проверките на външни ключове и други полезни неща, докато зарежда дъмпа.
/*!40014 SET @[email protected]@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @[email protected]@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
Това обяснява защо успяхте да възстановите масите, но когато се опитвате да промените, трябва да играете по по-строги правила. Ако наистина искате да отмените това, можете да опитате следното точно преди вашата алтер таблица:
mysql> SET SESSION sql_mode='';
След това променете таблицата.