我们正在从迁移应用程序 MySQL 5.5
至 5.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'
我知道有可能禁用严格模式,但这不是我正在寻找的解决方案。奇怪的是,同一个查询对另一个表起作用。
有人知道出了什么问题吗?
2条答案
按热度按时间mcdcgff01#
错误已经发生在第一行的查询中。你在这里试图改变这个列
event_start_date
,但错误消息是针对列的event_end_date
. 为了避免此错误,您需要使用一个查询来更改这两个列:它可能与您的另一个表一起工作,因为您只有一个类型的列
date
.jdzmm42g2#
这是MySQL5.7中新的严格模式。MySQL5.7中默认的sql模式是:只使用完全分组、严格的事务表、不使用零日期、不使用零日期、错误用零除法、不使用自动创建用户、不使用引擎替换
最好的方法是按照@cansik的建议更改模式。您还可以从sql\模式中删除no\ u zero\ u in\ date,no\ u zero\ u date(不推荐,但可以是临时解决方法)
设置全局sql\u mode=“。。。选择您需要的模式……”