当前位置: 首页 > 知识库问答 >
问题:

设置日期或日期时间默认值时MySQL出错

璩慎之
2023-03-14
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'

只是管用。

日期的大小写相同。

共有1个答案

邢硕
2023-03-14

该错误是由于sql模式造成的,根据最新的MySQL5.7文档,该模式可以是严格模式

MySQL文档5.7表示:

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

按命令

设置sql_mode=“”;

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

更新

对于@Dylan-su所说的bug一事:

从MySQL 5.6.5开始,TIMESTAMP和DATETIME列可以自动初始化并更新为当前日期和时间(即当前时间戳)。在5.6.5之前,这只适用于时间戳,并且每个表最多只适用于一个时间戳列。下面的说明首先介绍了MySQL5.6.5及以上版本的自动初始化和更新,然后介绍了5.6.5之前版本的不同之处。

关于NO_ZERO_DATE的更新

从MySQL5.7.4开始,此模式已被弃用。对于以前的版本,您必须注释掉配置文件中的相应行。请参阅关于NO_ZERO_DATE的MySQL 5.7文档

 类似资料:
  • 问题内容: 是否可以使用NOW()将默认时间添加为10分钟? 我已经尝试过类似的方法: 但是,它不起作用。 问题答案: 我不认为你可以做到这一点。 在MySQL的文件指出: 数据类型规范中的DEFAULT value子句指示列的默认值。除一个例外,默认值必须为常数;否则为0。它不能是函数或表达式。例如,这意味着您不能将日期列的默认值设置为诸如NOW()或CURRENT_DATE之类的函数的值。唯一

  • 有人能解释为什么当我用除: 00以外的秒设置日期时间本地输入的默认值时,浏览器会给我一个“无效值”的错误吗? 这可能是Chrome实现datetime本地的一个错误,因为这个错误没有出现在最新的火狐和Safari中。 Chrome中的错误:30.0。1599.69 铬金丝雀:32.0。1665.2金丝雀 这项工作: 但这并不: 链接到小提琴。 根据日期时间本地输入元素的W3规范,value属性应该

  • 问题内容: 我的日期来自数据库,如下所示: 我正在尝试使用Angular的日期过滤器将它们变成更漂亮的东西,但是… 要么 …只是吐出原始日期时间字符串:。没有错误。我究竟做错了什么? 更新 我看到MySQL的默认日期时间与Angular的数据过滤器期望的不兼容。我正在尝试像这样即时转换它,但会引发错误: 我怀疑我无法以尝试的方式实例化Date类。该错误是$ parse:syntax错误。 更新资料

  • 问题内容: 有谁知道如何将JS dateTime转换为MySQL datetime?还有一种方法可以向JS日期时间添加特定的分钟数,然后将其传递给MySQL日期时间? 问题答案: 尽管JS确实拥有足够的基本工具来执行此操作,但它相当笨拙。

  • 可设定日期与时间。 自动设定 连接至PlayStation®Network时,自动取得日期与时间的信息。 手动设定 可手动设定年/月/日/时/分/秒(12小时制时亦可设定AM/PM)。 轻触[OK]后,即会自00秒开始计数。 手动设定(通过互联网) 轻触[手动设定(通过互联网)],可连接互联网取得日期与时间的信息。

  • 问题内容: 我有一个脚本,需要在脚本的不同行执行以下命令: 在我的陈述中,我有以下内容: 我收到以下错误: 如果我将语句的顺序更改为: 我收到以下错误: 如果我再次将语句更改为: 我收到以下错误: 这是怎么回事,我怎么都可以工作? 问题答案: 您的麻烦是,您有一些代码希望对 模块 进行引用,而其他代码希望对类进行引用 。 显然,不能两者兼有。 当您这样做时: 您首先要设置为对该类的引用,然后立即将