Nguyên nhân của lỗi:chế độ SQL
Bạn có thể đặt giá trị mặc định của DATE
, DATETIME
hoặc TIMESTAMP
trường thành giá trị "không" đặc biệt của '0000-00-00' làm ngày giả nếu chế độ sql cho phép nó. Đối với các phiên bản MySQL thấp hơn 5.7.4, điều này được thống trị bởi chế độ NO_ZERO_DATE, hãy xem đoạn trích này của tài liệu
:
Ngoài ra, chế độ nghiêm ngặt phải được bật để không cho phép các giá trị "không":
Kể từ MySQL 5.7.4 điều này chỉ phụ thuộc vào chế độ nghiêm ngặt:
Kiểm tra phiên bản và chế độ SQL
Vì vậy, bạn nên kiểm tra phiên bản MySQL của mình và chế độ SQL của máy chủ MySQL của bạn với
SELECT version();
SELECT @@GLOBAL.sql_mode global, @@SESSION.sql_mode session
Bật CHÈN
Bạn có thể đặt sql_mode cho phiên của mình bằng SET sql_mode = '<desired mode>'
SET sql_mode = 'STRICT_TRANS_TABLES';
Phạm vi hợp lệ trong DATETIME
Phạm vi được hỗ trợ cho DATETIME
là
[1000-01-01 00:00:00] to ['9999-12-31 23:59:59'],
vì vậy giá trị DATETIME hợp lệ tối thiểu là '1000-01-01 00:00:00'.
Tuy nhiên, tôi không khuyên bạn nên sử dụng giá trị này.
Ghi chú bổ sung
Kể từ MySQL 5.6.5 tất cả TIMESTAMP
và DATETIME
các cột có thể có hành vi kỳ diệu (khởi tạo và / hoặc cập nhật), không chỉ TIMESTAMP
và chỉ có tối đa một cột, hãy xem Khởi tạo và Cập nhật Tự động cho TIMESTAMP và DATETIME
:
Bạn có thể thay đổi câu lệnh CREATE TABLE của mình trong trường hợp MySQL 5.6.5 hoặc mới hơn thành:
CREATE TABLE IF NOT EXISTS `article` (
`article_id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`url` VARCHAR(255) NOT NULL,
`title` VARCHAR(255) NOT NULL,
`date_from` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT 'Set the article as new or featured from a datetime.',
`date_to` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT 'Set the article as new or featured to a datetime.',
`backdated_on` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT 'The manual datetime that is modified or input by the user.',
`created_on` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'The permanent datetime when the article is created.',
`updated_on` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'The datetime when the article is updated on.',
PRIMARY KEY (`article_id`, `parent_id`, `template_id`),
UNIQUE INDEX `url_UNIQUE` (`url` ASC))
ENGINE = MyISAM
AUTO_INCREMENT = 66
COMMENT = 'Entity that holds the article with one-to-one properties.';