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ます。

最大値を超える値を 2 回目に挿入するintと、重複キー エラーが発生します。

このような大きな数値が必要な場合は、データ型を に変更できますbigint

于 2012-12-30T09:59:31.767 に答える
1

ああなるほど。それがIDプライマリであるとおっしゃっていたので、どのデータ型が であり int、どの最大値が でSIGNED INTあるかを推測します2147483647。データ型をdecimal(15,0)orに変更する必要がVARCHAR(15)あるため、値が分類されます。

挿入する値は、が保持できる8854011812範囲外です。int

于 2012-12-30T10:01:11.633 に答える