在 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
值的列。
我需要在 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
值的列。