要望や症状
MySQL 5.5環境にEC-CUBEを新規インストールする際、MySQL初期化ステップで以下のエラーが発生し、インストールが完了しません。
エラーの詳細
Schema-Tool failed with Error 'An exception occurred while executing a query: SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes'
理由や原因
EC-CUBE 4系はMySQL 5.7以上がシステム要件となっており、MySQL 5.5は非対応バージョンです。このエラーが発生する根本的な原因は、MySQL 5.5のインデックスキー長制限とEC-CUBE 4系で使用される文字エンコーディングの不整合にあります。
具体的には、EC-CUBE 4系ではマルチバイト文字(絵文字など)を正しく扱うために utf8mb4 文字セットを使用しています。この文字セットでは1文字あたり最大4バイトが必要となるため、VARCHAR(255)フィールドにインデックスを作成する際は最大1020バイト(255×4)の容量が必要となります。しかし、MySQL 5.5のデフォルト設定ではInnoDBのインデックスキー長は767バイトまでに制限されており、この容量不足によりテーブル作成時にエラーが発生します。
また、MySQL 5.5は既にサポートが終了しており、セキュリティ面でもリスクを抱えているため、EC-CUBEのシステム運用としては適さない状況にあります。
解決策
推奨解決方法
MySQL 5.7以上にアップグレードしてください。MySQL 5.7以降ではinnodb_large_prefixがデフォルトで有効になり、インデックスキー長制限が3072バイトに拡張されるため根本的に解決されます。
MySQL 5.5での一時的対処(非推奨)
やむを得ずMySQL 5.5を使用する場合は、以下の設定変更で対処が可能ですが、パフォーマンスやデータ整合性に影響があるため推奨いたしません。
my.cnfまたはmy.iniの設定変更
[mysqld]
innodb_large_prefix = 1
innodb_file_format = Barracuda
innodb_file_per_table = 1
設定反映手順
- MySQLサービスを停止してください
- 設定ファイルを編集してください
- MySQLサービスを再起動してください
- EC-CUBEインストールを再実行してください
注意事項
- MySQL 5.5は既にサポート終了しており、セキュリティリスクがあります
- 一時的対処は将来的な問題の原因となる可能性があります
- 本番環境では必ずMySQL 5.7以上をご使用ください