当没有值相同时,我得到一个非常奇怪的重复输入错误...
INSERT INTO offer_status (id,user_id,sql_id,disabled)
VALUES ('8854011812','8854','11812','0')
返回:
#1062
- 为'PRIMARY'键重复输入'2147483647'
这对我来说根本没有意义!
注意:此代码通常不会执行,我只是尝试调试。通常在我的PHP中我有:
$offer=$campid;
$id=$user_id.'0'.$offer;
$sql="INSERT INTO offer_status (id,user_id,sql_id,disabled) VALUES (?,?,?,?)
ON DUPLICATE KEY UPDATE disabled=VALUES(disabled)";
$db->prepare($sql)->execute(array($id, $user_id, $offer, 0));
id
是主键。这是怎么回事?
已添加:DESC offer_status
的结果:
Field Type Null Key Default Extra
id int(12) NO PRI NULL
user_id int(12) NO NULL
sql_id int(12) NO MUL NULL
favor tinyint(4) NO 0
disabled tinyint(4) NO 0
pref int(2) NO 0
答案 0 :(得分:13)
8854011812
超出int
范围。它将替换为int
的最大2147483647
个数字。
第二次插入比int
max更大的值时,您将收到重复键错误。
如果您需要如此高的数字,可以将数据类型更改为bigint
。
答案 1 :(得分:1)
哦,我明白了。由于您已经提到ID
是主要版本,因此我猜其数据类型为int
,SIGNED INT
的最大值为2147483647
。您应该将数据类型更改为decimal(15,0)
或VARCHAR(15)
,以便捕获该值。
您要插入的值8854011812
有点超出int
可以容纳的范围。