Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有非空日期字段的Mysql插入查询。可能吗?_Mysql_Date_Upgrade - Fatal编程技术网

具有非空日期字段的Mysql插入查询。可能吗?

具有非空日期字段的Mysql插入查询。可能吗?,mysql,date,upgrade,Mysql,Date,Upgrade,我刚刚将我的安装从MySQL 5.0.5升级到MySQL 5.6 使用MySQL 5.0,我可以有一个插入查询,如下所示: INSERT INTO mytable (myid, mydate, myname) VALUES (NULL, '', 'John'); 但显然不再是了。现在,如果我尝试,它会给我以下错误: #1292 - Incorrect date value: '' for column 'mydate' at row 1 顺便说一下,mydate的定义是mydate日期不为空

我刚刚将我的安装从MySQL 5.0.5升级到MySQL 5.6

使用MySQL 5.0,我可以有一个插入查询,如下所示:

INSERT INTO mytable (myid, mydate, myname) VALUES (NULL, '', 'John');
但显然不再是了。现在,如果我尝试,它会给我以下错误:

#1292 - Incorrect date value: '' for column 'mydate' at row 1
顺便说一下,mydate的定义是
mydate日期不为空,

如果我把查询改成

INSERT INTO mytable (myid, mydate, myname) VALUES (NULL, '0000-00-00', 'John');
。。。或者

INSERT INTO mytable (myid, mydate, myname) VALUES (NULL, 0, 'John');
。。。但它成功了

这种行为是由MySQL中的某些设置控制的吗?如果是,我在哪里可以找到它?还是我必须更改所有查询?建议

谢谢。

尝试启用此功能

允许\u无效的\u日期

注意:我不建议这样做。我只是回答怎么做。在我看来,最好清理查询和数据,并为非空的列提供一个良好的默认值。

尝试启用此选项

允许\u无效的\u日期


注意:我不建议这样做。我只是回答怎么做。在我看来,最好是清理查询和数据,并为非空的列提供一个良好的默认值。

应该不用说您做得不对。如果您不打算存储任何内容,则该列应为空,并且在使用
NULL
时不应尝试插入空字符串

但是,请考虑这一点:

如果严格模式无效,MySQL将插入无效或缺失值的调整值,并生成警告

但当严格模式生效时

对于事务表,当启用
STRICT\u ALL\u tables
STRICT\u TRANS\u tables
时,数据更改语句中的无效值或缺少值会发生错误。语句被中止并回滚

选择@SQL\u模式
应显示您正在(至少)使用
严格的传输表运行。虽然这不是5.6中的内部默认值,但它包含在默认的5.6配置文件中。如果需要旧的行为,您需要删除它并重新启动服务器


……虽然你应该考虑让你的代码行为更正确。

不应该说你做的不对。如果您不打算存储任何内容,则该列应为空,并且在使用

NULL
时不应尝试插入空字符串

但是,请考虑这一点:

如果严格模式无效,MySQL将插入无效或缺失值的调整值,并生成警告

但当严格模式生效时

对于事务表,当启用
STRICT\u ALL\u tables
STRICT\u TRANS\u tables
时,数据更改语句中的无效值或缺少值会发生错误。语句被中止并回滚

选择@SQL\u模式
应显示您正在(至少)使用
严格的传输表运行。虽然这不是5.6中的内部默认值,但它包含在默认的5.6配置文件中。如果需要旧的行为,您需要删除它并重新启动服务器


……虽然你应该考虑让代码的行为更正确。

好的,我得问一下。为什么要在声明为非空日期的字段中插入空字符串?您好,只需设置表字段mydate=mydate DATETIME not null DEFAULT NOW()Nikki9696,这只是您不用考虑就可以做的事情之一。。。如果用户未输入任何内容,则表单上的字段日期仍为空。如果MySQL处理将其转换为“0000-00-00”的空白字段,这就是我所需要的。。。为什么要麻烦?现在,用版本5.6,它似乎成为一个问题,所以我必须给它一个解决方案,要么通过改变MySQL配置,要么用一个值填充空白字段。John Diaz,缺省NOW()不是我的选择,因为字段应该保持零(00)-00 -00,直到有人决定它需要一个值。该字段表示人员的退出日期,即只要该人员尚未退出,该字段将保持空白。Dentra Andres,很抱歉在您撰写此内容后这么久打扰您,但我可以问一下,错误消息#1292出现在哪里?我和你有着同样的问题,我可以解决它,但它可能发生在我没有意识到的地方,因为它似乎默默地失败了。获取错误消息会有所帮助。我已经查看了常规mysql日志文件,但没有在那里看到它。好的,我必须问一下。为什么要在声明为非空日期的字段中插入空字符串?您好,只需设置表字段mydate=mydate DATETIME not null DEFAULT NOW()Nikki9696,这只是您不用考虑就可以做的事情之一。。。如果用户未输入任何内容,则表单上的字段日期仍为空。如果MySQL处理将其转换为“0000-00-00”的空白字段,这就是我所需要的。。。为什么要麻烦?现在,用版本5.6,它似乎成为一个问题,所以我必须给它一个解决方案,要么通过改变MySQL配置,要么用一个值填充空白字段。John Diaz,缺省NOW()不是我的选择,因为字段应该保持零(00)-00 -00,直到有人决定它需要一个值。该字段表示人员的退出日期,即只要该人员尚未退出,该字段将保持空白。Dentra Andres,很抱歉在您撰写此内容后这么久打扰您,但我可以问一下,错误消息#1292出现在哪里?我和你有着同样的问题,我可以解决它,但它可能发生在我没有意识到的地方,因为它似乎默默地失败了。获取错误消息会有所帮助。我已经查看了常规mysql日志文件,但没有在那里看到它。Nikki9696。我同意你的看法。“允许\u无效\u日期”的范围超出了我想要的范围。如果我找不到更好的方法,我可能需要编写代码来生成带有“0000-00-00”的查询。我只想保持它在前一版本中的行为。我想不是