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

标签 mysql innodb

我需要在 InnoDB 表中创建一个日期字段,但出现此错误

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 不为空,这意味着所有旧记录都将填充默认日期,因为在您的情况下启用了严格日期模式,这意味着您的 bdate 值默认为 0000-00-00 将变得无效,服务器将抛出您所看到的错误。

虽然修复数据库端可能不是一个好主意,但如果可能的话,在应用程序层中进行总是更好。

关于mysql - 在 InnoDB 表 MySQL 数据库中创建日期字段时日期值不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50912369/

相关文章:

mysql - 用于生产系统的 DBLinq?

php - 使用mysql设置多源复制

javascript - 使用ajax从javascript传递数据并将其保存到数据库

php - MySQL 错误 "an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near"

php - 如何向表中插入多条数据

mysql - 数据库设计,使一个表指向多个和某种递归指针

php - InnoDB表中MySQL全文的替换相关性排序?

mysql - 添加 PK 时,隐藏的 MySQL [InnoDB] PK 会发生什么?

mysql - Mysql INSERT IGNORE 可以忽略哪些错误,实际上可以忽略?

MySQL 5.7 alter table DDL 语句锁定,但应允许并发 DML