Một số thông tin cơ bản về sql_mode và 'NO_ZERO_DATE': http:// dev.mysql.com/doc/refman/5.1/en/sql-mode.html
Bạn đã đề cập rằng bạn đã khôi phục các bảng từ một máy chủ khác. Nếu bạn đã sử dụng mysqldump thì câu trả lời cho câu hỏi của bạn là mysql đã tắt chế độ 'NO_ZERO_DATE' trong khi tải SQL được kết xuất. Mysqldump (được thử nghiệm trong 5.5) đặt dòng này ở đầu SQL được kết xuất:
/*!40101 SET @[email protected]@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
Nó cũng tắt kiểm tra khóa ngoại và những thứ hữu ích khác trong khi tải kết xuất.
/*!40014 SET @[email protected]@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @[email protected]@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
Điều này giải thích tại sao bạn có thể khôi phục các bảng, nhưng khi cố gắng thay đổi, bạn phải chơi theo các quy tắc chặt chẽ hơn. Nếu bạn thực sự muốn ghi đè điều này, bạn có thể thử cách sau ngay trước bảng thay thế của bạn:
mysql> SET SESSION sql_mode='';
Sau đó, thay đổi bảng.