eccube2 インストール中に、DB処理でエラーが発生しました

2020年2月25日

EC-CUBE:2.13.3をインストールしたところ、下記のようなエラーが発生しました。

Fatal error: DB処理でエラーが発生しました。Error 'Unknown table engine 'InnoDB’ SQL: [SET SESSION storage_engine = InnoDB]

グッグるで調べたら、いくつの解決策がありますが、それでこちらの問題を解決してなかったので、自力で調査&対応しました。

スポンサーリンク

0.前提

システム要件は下記の通りです。今回エラーを発生させた要件はEC-CUBEバージョンとDBバージョンと思います。
・EC-CUBEバージョン:2.13.3
・PHPバージョン:PHP 5.3.29
・DBバージョン:MySQL 5.0.77

1.直ぐにエラーの発生場所を見つけた

「eccube\class\db\dbfactory\SC_DB_DBFactory_MYSQL.php」ファイルの363行辺り、SC_Queryでの初期化時に下記の実装がありました。

MySQL 5.0はstorage_engineのInnoDBをサポートしているのに、前述のエラーが発生したのは不思議ですね。レンタルサーバーのDB環境の設定を確認したところ、storage_engineにInnoDBがない!!!!MyISAMがありますので、下記の実装を修正しました。

2.またエラーが発生した

万歳!解決!と思いきや、進むボタンを押したら、またエラーが発生しました。しかも今度はエラーメッセージがない!!どうしよう~~誰かが助けて~~~
誰でも返事してくれなかったので、自力で解決しました。
「eccube\install\index.php」ファイルの868行辺りに、上記と同じような実装がありました。それを上記と同じように修正すれば、直るはずと信じていました。

3.またエラーが発生した(2回目)

今度こそ、解決!!シャンパンを開けた瞬間に、体が固まった。またエラーが発生!!クソ!!!
画面上に意味ないエラーメッセージ[Error message: Could not execute statement] が表示されましたので、こんな時に、エラーログの登場です。
「eccube\html\install\temp」の下に、インストールログ(install.log)を開き、一番下に下記のエラーメッセージが出力しました。

Specified key was too long; max key length is 1000 bytes

引かれた場所は、dtb_index_listテーブルのPKを作成した際に、PRIMARY KEY (table_name(255), column_name(255))のところです。
調べたら、MySQLのstorage_engineがMyISAMの場合、インデックスの長さは1000バイトだそうです。
dtb_index_listテーブルは、table_name(255)とcolumn_name(255)の複合キーで、両方ともtext(Varchart)なので、(255 + 255) X 3 = 1530bytesで計算したら、軽く1000bytesの制限を超えますよね。
普通にテーブル名やカラム名は英字で定義されるなので、450bytes十分ではないかと思って、適当に150に変更しました。
「eccube\html\install\sql\create_table_mysql.sql」ファイルの1172行辺り、下記のように修正して、進むボタンを押したら。。。万歳!無事にインストール成功しました!

4.最後に

本当に解決したかと疑って、商品検索/登録/削除、会員登録、商品購入完了を動作確認したところ、特に問題なかった!!
ソースを改修せずに、問題を解決したほうが良いと思いますが、今回の原因は誰の責任だろうと思って、eccube2.13系の要件を確認したところ、InnoDBを明記してなかったです。タダなので、まあいいや。

スポンサーリンク