photo credit: B Tal via photopin cc
GW楽しんでますか?こんにちは、えんぞーです。
今回は久々の投稿にもかかわらず、ほとんどの人が興味無いであろうEC-CUBEのメモを・・・。
問題は買い物カゴに商品を入れまくっていたら買い物カゴが空になるというちょっとしたイリュージョン。
店舗側にしてみれば最悪ですよね、カゴ落ちどころの話ではありません。
顧客側だって一生懸命何点もの商品を選んで買い物カゴに入れていったのにいきなりカゴの中身が空になったら心が折れます。
原因と解決策
参考:SESSIONデータが多すぎるとMySQLのTEXT型をはみ出す
参考:商品を18点以上カートに入れると、カート内の商品が0点に戻ってしまう
原因
原因はセッション情報のオーバーフロー。買い物カゴ自体が貧弱すぎて底が抜けて空になったと。そういうことですか。そうですか。
しかもこれ、MySQLだけで起こり得るみたいですね。
MySQLのTEXTの最大値は「65,535byte」で有るのに対してPostgreSQLの場合は無制限だとの事です。
結構前に問題提起されたようで、既に入れ込むセッション情報から不要な項目を削除する修正も行われているようです。
参考:チェンジセット 21191 – EC-CUBE Trac
が、しかし。
個々の情報自体をシェイプアップしてもカートに入る商品数が多かったら結局溢れるわけで・・・。
とにかく、問題のフィールドタイプを変更して様子を見ることにします。
解決策
「dtb_session」テーブルの「sess_data」フィールドのデータ型をTEXTからLOGTEXTに変更。
これでセッション情報がオーバーフローするという現象は防げるかと思います。
とりとめのないまとめ
おそらく現在のバージョン(2.13.1)でセッションがオーバーフローすると言うのはそうそう有ることでは無いとは思いますが、万が一の場合に備えてメモ程度に残しておこうかと。
しかしなぁ・・・EC-CUBE・・・。もし自分でネットショップやることになったら使うかと考えると・・・出来るだけ使わない方向で考えてしまうかも。