mysql DATE数据类型的默认值不起作用

时间:2016-08-09 08:28:21

标签: mysql

我的mysql表中有一个名为SELECT id, sum(datediff(weeks, startdate, ISNULL(enddate, '2000-01-01')) AS wksdoingstuff WHERE event IN ('something', 'somethingelse'. 'anotherthing') AND BETWEEN 1989-01-01 AND 2000-01-01 GROUP BY id 的列。

这是我创建它的方式。

leave_date

我早期的mysql版本没问题,但现在我有5.7,当我尝试创建上表时,我可能会收到错误。

消息看起来像这样:

  

ERROR 1067(42000):' leave_date'

的默认值无效

有人可以告诉我会出现什么问题吗?

谢谢。

3 个答案:

答案 0 :(得分:2)

以下是来自官方site的文件。(Mysql 5.7)

  

DATE类型用于具有日期部分但没有时间部分的值。 MySQL在' YYYY-MM-DD'中检索并显示DATE值。格式。支持的范围是' 1000-01-01'到' 9999-12-31'。

0000-00-00不在1000-01-019999-12-31的范围内。

答案 1 :(得分:2)

您的问题是您没有使用有效日期。

MySQL中的最小有效日期是'1000-01-01',每个RDBMS通常都有自己的最小日期值。 Oracle为0001-01-01,SQL-Server为01/01/1753

编辑:根据您收到的错误,我相信您在此专栏中也有时间价值?尝试将其更改为日期时间

ALTER TABLE employees MODIFY leave_date DATETIME NOT NULL DEFAULT '1000-10-01'

或者更新表并自己截断时间值,然后使用alter命令。

答案 2 :(得分:1)

这是因为服务器SQL模式 - NO_ZERO_DATE

参考文献:

  

NO_ZERO_DATE - 在严格模式下,不要允许' 0000-00-00'作为有效日期。您仍然可以使用IGNORE选项插入零日期。如果不是严格模式,则接受日期,但会生成警告。