4

当没有值甚至相同时,我收到一个非常奇怪的重复输入错误...

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   
4

2 回答 2

13

8854011812超出int范围。它将被替换为最大int数字2147483647

第二次插入大于int最大值的值时,会出现重复键错误。

如果您需要如此高的数字,您可以将数据类型更改为bigint.

于 2012-12-30T09:59:31.767 回答
1

原来如此。既然你提到这ID是主要的,我猜它的数据类型是 int,最大值SIGNED INT2147483647。您应该已经将数据类型更改为decimal(15,0)VARCHAR(15)这样的值会被覆盖。

您插入的值8854011812有点超出 anint可以容纳的范围。

于 2012-12-30T10:01:11.633 回答