我刚刚将我的安装从 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中某些设置的控制?如果是这样,我在哪里可以找到它?或者我是否必须更改所有查询?建议?
感谢。
答案 0 :(得分:2)
不用说,你做错了。如果您打算不存储任何内容,该列应该可以为空,并且当您应该使用NULL
时,不应该尝试插入空字符串。
考虑一下,但是:
如果严格模式没有生效,MySQL会为无效值或缺失值插入调整后的值并产生警告。
但是当严格模式 有效时......
对于事务表,当启用
STRICT_ALL_TABLES
或STRICT_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
注意:我不建议这样做。我只是回答如何做到这一点。在我看来,最好清理查询和数据,并为非空的列提供良好的默认值。