本地mysql错误,rds mysql错误

7gyucuyw  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(522)

我有一个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;
dffbzjpn

dffbzjpn1#

我认为错误在于那些引号('')。当您要使用自动递增字段执行插入时,必须在自动递增字段位置使用null作为参数。看看这是否有效:

$sql = "INSERT INTO `users` 
    (`id`, `name`, `email`, `pass`)
    values(null,'omi','omi@gmail.com','123123');

编辑1
使用null不会产生任何错误,因为dbms内部准备接收这样的参数。它知道它的职责是生成序列的下一个数字,如果没有,则首先插入0(在您的例子中是integer类型)。我知道在一个字段的ddl中定义“notnull”,然后在dml insert语句中为这个字段使用“null”可能看起来很混乱,但是使用auto\u increment特性是正确的方法。
根据文件:
如果列被声明为notnull,也可以将null赋给列以生成序列号。
另外,如果在语句中使用空字符串作为参数不会产生任何错误,可能是因为rds接口有一个将空转换为null的内部函数。类似mysql中的nullif函数。

hc8w905p

hc8w905p2#

你不能那样做。要么不提“id”,要么给它空值。

$sql = "INSERT INTO `users` (
`name`, 
`email`,
`pass`)
values('omi','omi@gmail.com','123123')

或:

$sql = "INSERT INTO `users` (`id`, 
`name`, 
`email`,
`pass`)
values('NULL','omi','omi@gmail.com','123123')

相关问题