EC-CUBE3でサイトをしばらく運営していると、Error: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry ‘32767’ for key ‘PRIMARY’ というエラーが発生することがあります。
これはオートインクリメント(MySQL風)するプライマリーキーが、その型の上限値に達してしまった時に発生するエラーです。

EC-CUBE3でなぜ発生する?

‘32767’という数字でsmallintだとすぐにわかる方も多いと思いますが、EC-CUBEサイトではsmallintの上限値を比較的簡単に超える場合があります。

例えば公式の関連商品プラグインのidがsmallintになっているのはEC-CUBE界隈では有名な話ですが、5000商品に関連商品を6~7個ずつ設定すると簡単に上限値を超えてしまいますね。
商品登録ボタンを押すとplg_related_product テーブルのIDが維持されず新しく発行される仕様のため、想像以上にあっさり超えてしまいます。

対策としてはプライマリーキーの型をsmallintからintegerに変更することとなります。
関連商品プラグイン程度であれば簡単ですが、もしそのカラムに対して外部キーのリレーションがある場合は、リレーション先も全て型を変更していく必要があるため主要テーブルの型変更だと重作業になる可能性があります。

EC-CUBE4関連商品プラグインでは?

現行のEC-CUBE4向けプラグインではすでにidのタイプはintegerに修正されています。

もしもinteger型の最大値に達してしまった場合は次のようなエラーとなります。

Error: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry ‘2147483647’ for key ‘PRIMARY’

日本発!ECオープンプラットフォーム「EC-CUBE」 EC-CUBEゴールドパートナー EC-CUBEは株式会社イーシーキューブの商標です

EC-CUBEに関するお問い合わせ


    [重要]現在公式にセキュリティサポートが切れていないPHPは8.1以上、MySQLは8.0以上で、対応しているEC-CUBEバージョンは4.2以上です。古いEC-CUBEを使っている方は適切なタイミングでバージョンアップをご検討ください。

    EC-CUBEバージョンアップ