在 InnoDB table MySQL 数据库中创建日期字段时日期值不正确

Incorrect date value while creating Date field in InnoDB table MySQL database

我需要在 InnoDB 中创建一个日期字段 table 但我收到此错误

ALTER TABLE `tbl_name`  ADD `bdate` DATE NOT NULL  AFTER `another_field`;
MySQL said: Documentation
#1292 - Incorrect date value: '0000-00-00' for column 'bdate' at row 1

严格模式影响服务器是否允许'0000-00-00'作为有效日期:如果未启用严格模式,则允许'0000-00-00'并且插入不会产生警告.如果启用了严格模式,则不允许使用 '0000-00-00' 并且插入会产生错误,除非同时给出 IGNORE。对于 INSERT IGNORE 和 UPDATE IGNORE,允许 '0000-00-00' 并且插入会产生警告。

您需要禁用日期严格模式或需要从 bdate 列中删除 not null

为什么会这样?

你说 bdate 不为空,这意味着所有旧记录都将填充默认日期,因为在你的情况下 strict date mode 已启用,这意味着你的 bdate 值默认为 0000-00-00将变得无效,服务器将抛出您所看到的错误。

虽然修复数据库方面可能不是个好主意,但如果可能的话,最好在 App layer 中完成。

如果您的 table 已经有行,则您不能使用 NOT NULL 添加新列。

创建没有 NOT NULL 限制的列,然后用数据填充该列,然后添加 NOT NULL 限制。

或添加具有 DEFAULT 值的列。