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

时间:2015-10-09 21:29:33

标签: mysql date upgrade

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

使用MySQL 5.0,我可以像这样使用插入查询

#1292 - Incorrect date value: '' for column 'mydate' at row 1

但显然不再了。现在,如果我尝试,它会给我这个错误:

mydate date NOT NULL,

顺便说一句,mydate被定义为 INSERT INTO mytable (myid, mydate, myname) VALUES (NULL, '0000-00-00', 'John');

如果我将查询更改为...

INSERT INTO mytable (myid, mydate, myname) VALUES (NULL, 0, 'John');

......或......

  function online(){
    var offlinearray = [];
    var onlinearray  = [];
    console.log('called online');

    //foreach item in channels
    codeLib.channels().forEach(function(item){
      console.log(item);
      // run gotJSON
      codeLib.gotjson(item).done(function(result){
        if (result.stream == null) {
          // push into offline array
          offlinearray.push(item);
          console.log('OFFLINE array: '+ offlinearray );
        }else{
          // push into online array
          onlinearray.push(item);
          console.log('ONLINE array: ' + onlinearray); <--I can see values in console.log here
        }
      });

    });
    //console.log('inside: '+onlinearray);
    return onlinearray; <---doing something wrong here.
  }

......比成功。

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

感谢。

2 个答案:

答案 0 :(得分:2)

不用说,你做错了。如果您打算不存储任何内容,该列应该可以为空,并且当您应该使用NULL时,不应该尝试插入空字符串。

考虑一下,但是:

  

如果严格模式没有生效,MySQL会为无效值或缺失值插入调整后的值并产生警告。

但是当严格模式 有效时......

  

对于事务表,当启用STRICT_ALL_TABLESSTRICT_TRANS_TABLES时,数据更改语句中的值无效或缺失会发生错误。该声明已中止并回滚

     

http://dev.mysql.com/doc/refman/5.6/en/sql-mode.html#sql-mode-strict

SELECT @@SQL_MODE;应该显示您正在使用(至少)STRICT_TRANS_TABLES。虽然这不是5.6中的内部默认值,但 包含在默认的5.6配置文件中。如果您想要旧的行为,您将要删除它并重新启动服务器。

...虽然你应该考虑使你的代码表现得更正确。

答案 1 :(得分:0)

尝试启用此

ALLOW_INVALID_DATES

http://dev.mysql.com/doc/refman/5.6/en/sql-mode.html#sqlmode_allow_invalid_dates

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