MySQL5.7:“event\u end\u date”的默认值无效

gwbalxhn  于 2021-06-16  发布在  Mysql
关注(0)|答案(2)|浏览(350)

我们正在从迁移应用程序 MySQL 5.55.7 . 作为默认值 0000-00-00 中的日期字段不再允许 MySQL 5.7 在严格模式下,我想将默认值改为 NULL .
相关字段定义如下:

+------------------+----------------------+------+-----+------------+----------------+
| Field            | Type                 | Null | Key | Default    | Extra          |
+------------------+----------------------+------+-----+------------+----------------+
| event_start_date | date                 | YES  |     | 0000-00-00 |                |
| event_end_date   | date                 | YES  |     | 0000-00-00 |                |
+------------------+----------------------+------+-----+------------+----------------+

当我尝试执行以下操作时 ALTER 查询:

ALTER TABLE events CHANGE event_start_date event_start_date date DEFAULT NULL;    
ALTER TABLE events CHANGE event_end_date event_end_date date DEFAULT NULL;

我得到以下错误:

Invalid default value for 'event_end_date'

我知道有可能禁用严格模式,但这不是我正在寻找的解决方案。奇怪的是,同一个查询对另一个表起作用。
有人知道出了什么问题吗?

mcdcgff0

mcdcgff01#

错误已经发生在第一行的查询中。你在这里试图改变这个列 event_start_date ,但错误消息是针对列的 event_end_date . 为了避免此错误,您需要使用一个查询来更改这两个列:

ALTER TABLE events CHANGE event_start_date event_start_date date DEFAULT NULL, CHANGE event_end_date event_end_date date DEFAULT NULL;

它可能与您的另一个表一起工作,因为您只有一个类型的列 date .

jdzmm42g

jdzmm42g2#

这是MySQL5.7中新的严格模式。MySQL5.7中默认的sql模式是:只使用完全分组、严格的事务表、不使用零日期、不使用零日期、错误用零除法、不使用自动创建用户、不使用引擎替换
最好的方法是按照@cansik的建议更改模式。您还可以从sql\模式中删除no\ u zero\ u in\ date,no\ u zero\ u date(不推荐,但可以是临时解决方法)
设置全局sql\u mode=“。。。选择您需要的模式……”

相关问题