我有一个mysql insert查询,它在awsrds(liveenv)上运行,但在local(localenv)上抛出一个错误。在本地,我正在使用mysql v-5.6
$sql = "INSERT INTO `users` (`id`,
`name`,
`email`,
`pass`)
values('','omi','omi@gmail.com','123123')
id不为空且自动递增。我在local上得到的错误是'incorrect integer value:'',对于第1行的'id'列,但是当在live env上执行此操作时,所有数据都被插入到表中。我不明白这里到底发生了什么。请帮忙。谢谢您。用户表的ddl。地方的
CREATE TABLE `users`
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(256) DEFAULT '',
`email` varchar(256) NOT NULL,
`pass` varchar(256) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=25986 DEFAULT CHARSET=utf8;
居住
CREATE TABLE `users` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(254) DEFAULT '',
`email` varchar(256) NOT NULL,
`pass` varchar(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=26046 DEFAULT CHARSET=utf8;
2条答案
按热度按时间dffbzjpn1#
我认为错误在于那些引号('')。当您要使用自动递增字段执行插入时,必须在自动递增字段位置使用null作为参数。看看这是否有效:
编辑1
使用null不会产生任何错误,因为dbms内部准备接收这样的参数。它知道它的职责是生成序列的下一个数字,如果没有,则首先插入0(在您的例子中是integer类型)。我知道在一个字段的ddl中定义“notnull”,然后在dml insert语句中为这个字段使用“null”可能看起来很混乱,但是使用auto\u increment特性是正确的方法。
根据文件:
如果列被声明为notnull,也可以将null赋给列以生成序列号。
另外,如果在语句中使用空字符串作为参数不会产生任何错误,可能是因为rds接口有一个将空转换为null的内部函数。类似mysql中的nullif函数。
hc8w905p2#
你不能那样做。要么不提“id”,要么给它空值。
或: