EC-CUBEで商品を大量注文するとお届け先情報が空っぽになる件

EC-CUBE で商品を大量に注文した時に、お届け先情報が空っぽになるという問題が起きたので調べてみました。

なお、動作環境は EC-CUBE 2.13.2 です。

原因

色々と調べてみるとどうやら EC-CUBE の潜在的な不具合があり、他にも同様な現象が起こっている問題のようです。

カートに入れた商品情報はテーブル dtb_session のカラム sess_data に格納されるようになっていますが、DB に MySQL を使っている場合、sess_data のデータ型が text 型のため、沢山の商品を一度に購入しようとすると text 型のサイズ制限を超えて情報があふれてしまうとのこと。

確かに自分の環境でも、使っている DB は MySQL、また商品を一度に10点ほど購入しようとした場合に問題が発生していました。

こういう原因なのであれば、商品を沢山注文した場合に限らず、配送先を複数指定するなど他にもデータ量が増える形で注文を行う場合に発生する可能性はありそうですね。

なお DB に PostgreSQL を使っている場合は、text 型にデータサイズの制限が無いのでこの問題は起きません。

対応方法

原因がカラム sess_data のサイズ制限ということで、データ型を text から longtext に変更します。なお、sess_data と同様にセッション情報が格納されるフィールド dtb_order_temp.session のデータ型も longtext に変更します。

MySQL コマンドで下記 SQL を実行します。


以上です。自分の環境では、この対応以降問題は起きなくなりました。

前述のチケットでは「必要であれば対応します」というコメントもありましたが、最新バージョン 2.13.3 の DDL をのぞいてみた限りまだ対応はされていないように見えました。結構深刻な問題にも思えますがどう扱われているんでしょうね・・・。

この記事を書いた人

ko31

岩手県出身、群馬県在住のフリーランスWeb系エンジニアです。
Webシステム・アプリ、Webサービス、WordPress開発等を雑多にこなしています。バンカラ応援好きの振り飛車党。
PHP / WordPress / 高校野球 / 将棋 / WordPress / ブログ / 食べること / 二児の父親

>>もっと詳しいプロフィールはこちら

お仕事のご相談・お問い合わせ

当ブログの管理人は、Gosign(ゴーサイン)という屋号でフリーランス Web エンジニアとして活動しています。
ブログの掲載内容はもちろん、Web サイト制作や Web アプリケーション開発などのご相談・ご質問がありましたら、どうぞお気軽にお問い合わせください!

合わせて読みたい記事