为DATE或DATETIME设置默认值时,MySQL错误

Evhz:

我正在运行MySql Server 5.7.11和这句话:

updated datetime NOT NULL DEFAULT '0000-00-00 00:00:00'

不是工作。给出错误:

ERROR 1067 (42000): Invalid default value for 'updated'

但是以下内容:

updated datetime NOT NULL DEFAULT '1000-01-01 00:00:00'

正常工作

DATE的情况相同。

作为附带说明,它在MySQL文档中有所提及

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

即使他们也说:

无效的DATE,DATETIME或TIMESTAMP值将转换为适当类型(“ 0000-00-00”或“ 0000-00-00 00:00:00”)的“零”值。

还考虑了MySQL文档的第二个引号,有人可以让我知道为什么会出现该错误吗?

极客

错误是由于sql模式所致,根据最新的MYSQL 5.7文档,sql模式可以是严格模式

MySQL文档5.7说

严格模式影响服务器是否允许将“ 0000-00-00”作为有效日期:如果未启用严格模式,则允许“ 0000-00-00”并且插入不会产生警告。如果启用了严格模式,则除非也给出了IGNORE,否则不允许使用“ 0000-00-00”,并且插入会产生错误。对于INSERT IGNORE和UPDATE IGNORE,允许使用“ 0000-00-00”,并且插入会产生警告。

检查MYSQL模式

SELECT @@GLOBAL.sql_mode global, @@SESSION.sql_mode session

禁用STRICT_TRANS_TABLES模式

但是,要允许格式,0000-00-00 00:00:00您必须在mysql配置文件中或通过命令禁用STRICT_TRANS_TABLES模式

通过命令

SET sql_mode = '';

要么

SET GLOBAL sql_mode = '';

使用关键字GLOBAL需要超级特权,并且会影响从那时起所有客户端连接的操作

如果上述方法不起作用,则转到/etc/mysql/my.cnf(按照ubuntu)并注释掉STRICT_TRANS_TABLES

另外,如果你想永久设置在服务器启动时的SQL模式,然后包括SET sql_mode=''my.cnfLinux或MacOS的。对于Windows,必须在my.ini文件中完成

注意

但是,默认情况下,MYSQL 5.6中未启用严格模式。因此,它不会产生根据MYSQL 6文档所述的错误

MySQL允许您将“ 0000-00-00”的“零”值存储为“虚拟日期”。在某些情况下,这比使用NULL值更方便,并且使用较少的数据和索引空间。要禁止使用“ 0000-00-00”,请启用NO_ZERO_DATE SQL模式。

更新

关于@ Dylan-Su所说的bug问题:

我不认为这是MYSQL随时间演变的错误,因为随着产品的进一步改进而发生了一些变化。

但是我还有另一个有关该NOW()功能的错误报告

日期时间字段不接受默认的NOW()

另一个有用的注释 [请参阅TIMESTAMP和DATETIME的自动初始化和更新 ]

从MySQL 5.6.5开始,TIMESTAMP和DATETIME列可以自动初始化并更新为当前日期和时间(即当前时间戳)。在5.6.5之前的版本中,这仅适用于TIMESTAMP,并且每个表最多包含一个TIMESTAMP列。以下说明首先描述了MySQL 5.6.5及更高版本的自动初始化和更新,然后介绍了5.6.5之前版本的区别。

关于NO_ZERO_DATE的更新

从5.7.4版本的MySQL开始,不建议使用此模式。对于以前的版本,您必须注释掉配置文件中的相应行。请参阅NO_ZERO_DATE的MySQL 5.7文档

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

EF 7为DateTime列设置初始默认值

为 uuid 设置默认值时出现 SQL 语法错误

将 null 设置为默认值时 DatePicker Vuetify 错误

如何为MySQL Datetime列设置默认值?

在MySQL中将时间戳列的默认值设置为2时间戳的总和?

错误消息:为日期参数SSRS设置默认值

变量在关闭时设置为默认值

为空时在 Textview 中设置默认值

将非空列的默认值保留为空白时,将出现MySQL错误1366

MySQL将默认值设置为JSON类型列

将timestampdiff()设置为MySQL中的默认值

将默认值设置为 Mysql 中的数字列

设置函数默认值时出现Javascript错误

将C#WinForm Stop控件属性设置为默认值时将其设置为默认值

设置默认值,但结果为空

将 HTTPS 设置为默认值

无法为交换设置默认值

在Sharepoint中的Schema.xml中为DateTime字段设置默认值

Windows 10:当Firefox未显示在“设置”中时,将其设置为默认值吗?

当类型为 A (Scala) 时将什么设置为默认值

为@Input 设置默认值,以防它从出发时为空

使用AWS CLI时如何在JMESPath查询中为空值设置默认值?

在Golang中执行json Unmarshal时,如何将默认值设置为映射值?

默认值为null的MySQL int字段设置为0

MySQL使用DATE_ADD设置DATE列的默认值?

设置默认值时不显示@ Html.EditorFor DateTime

使用logstash输入jdbc插件将从Mysql拉到Elasticsearch的Null值设置为默认值

SQL函数-将date参数设置为默认值会破坏函数

在ng-model为null时在select中设置默认值