没有值重复时,重复键输入

时间:2012-12-30 09:55:58

标签: php mysql sql pdo

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

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   

2 个答案:

答案 0 :(得分:13)

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

第二次插入比int max更大的值时,您将收到重复键错误。

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

答案 1 :(得分:1)

哦,我明白了。由于您已经提到ID是主要版本,因此我猜其数据类型为intSIGNED INT的最大值为2147483647。您应该将数据类型更改为decimal(15,0)VARCHAR(15),以便捕获该值。

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