我正在运行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.cnf
Linux或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文档
问题内容: 如何为MySQL Datetime列设置默认值? 在SQL Server中为。MySQL的等效功能是什么?如果这是一个因素,我正在使用MySQL5.x。 问题答案: 重要编辑: 自 MySQL 5.6.5起 ,现在可以使用DATETIME字段实现此目的,请看下面的另一篇文章 … 以前的版本无法在DATETIME做到这一点… 但是您可以使用TIMESTAMP来做到这一点: 注意:如果您定
问题内容: 是否可以将MySQL 5.7中DATE( NOT DATETIME )列上的默认值设置为当前日期? 我尝试使用此方法(由Workbench生成): 但不适用于我。(表中没有数据) 问题答案: 你不能。该文档对此非常清楚: 例如,这意味着您不能将日期列的默认值设置为诸如NOW()或CURRENT_DATE之类的函数的值。例外是您可以将CURRENT_TIMESTAMP指定为TIMESTA
本文向大家介绍mysql中datetime类型设置默认值方法,包括了mysql中datetime类型设置默认值方法的使用技巧和注意事项,需要的朋友参考一下 通过navicat客户端修改datetime默认值时,遇到了问题。 数据库表字段类型datetime,原来默认为NULL,当通过界面将默认值设置为当前时间时,提示“1067-Invalid default value for 'CREATE_T
但以下内容: 只是管用。 日期的大小写相同。
本文向大家介绍详解Mysql数据库date, datetime类型设置0000-00-00默认值(default)报错问题,包括了详解Mysql数据库date, datetime类型设置0000-00-00默认值(default)报错问题的使用技巧和注意事项,需要的朋友参考一下 现象:MySQL5.7版本之后,date, datetime类型设置默认值"0000-00-00",出现异常:Inval
本文向大家介绍如何设置MySQL默认值NONE?,包括了如何设置MySQL默认值NONE?的使用技巧和注意事项,需要的朋友参考一下 要在MySQL中设置默认值,您需要使用DEFAULT关键字。让我们首先创建一个表- 我们为插入时未输入的值设置了DEFAULT以上。现在,让我们使用insert命令在表中插入一些记录。我们尚未在此处为某些行插入值。默认设置在那里- 使用select语句显示表中的所有记