WordPressで発生するMySQLエラー「Specified key was too long」(767バイト制限)の修正方法

intermediate📝 WordPress2026-07-26| MySQL 5.7.7未満、MariaDB 10.2.2未満のバージョン。レガシーなUbuntu/CentOSビルドや、低価格な共有ホスティング環境で一般的です。

Error Message

ERROR 1071 (42000): Specified key was too long; max key length is 767 bytes
#mysql#mariadb#データベースエラー#WordPress修正#utf8mb4#innodb

エラーが発生する理由WordPressの新規インストールを妨げるデータベースエラーほど、イライラするものはありません。通常、インストールが完了する直前に発生します。ERROR 1071 (42000)が表示され、これはデータベースがインデックスを作成しようとして壁に突き当たったことを示しています。これは通常、古いサーバー環境でWooCommerceYoast SEOのようなリソースを大量に消費するプラグインを有効化した際に発生します。

ERROR 1071 (42000): Specified key was too long; max key length is 767 bytes

制限の背景にある計算これは単純な計算に集約されます。現代のWordPressは、絵文字や特殊記号をサポートするためにutf8mb4文字セットを使用します。この形式では、各文字が最大4バイトのスペースを占有します。

プラグインがVARCHAR(255)カラムにユニークインデックスを作成しようとすると、データベースは次のように計算します:255文字 × 4バイト = 1,020バイト。古いバージョンのInnoDBエンジン(MySQL 5.7.7以前)は、インデックスキーに対して厳格な767バイトの制限があるため、データベースはこのクエリを拒否します。本質的には、1,020バイトの杭を767バイトの穴に打ち込もうとしているようなものです。

解決策1:InnoDB Large Prefixを有効にする(VPSユーザーに最適)SSH経由で独自のサーバーを管理している場合は、データベースのファイル形式の処理方法を変更することで修正できます。最大3,072バイトのインデックスキーをサポートするBarracuda形式に移行する必要があります。

1. データベースにアクセスする```

mysql -u root -p


### 2. グローバル変数を更新する以下のコマンドを実行して、エンジンに大きなプレフィックスを許可するように指示します:

SET GLOBAL innodb_file_format = Barracuda; SET GLOBAL innodb_file_per_table = ON; SET GLOBAL innodb_large_prefix = ON;


### 3. 変更を永続化するこのステップをスキップしないでください。スキップすると、次回の再起動後にエラーが再発します。設定ファイル(通常は`/etc/mysql/my.cnf`)を開き、`[mysqld]`ブロックの下に以下の行を追加します:

[mysqld] innodb_file_format = Barracuda innodb_file_per_table = ON innodb_large_prefix = ON


サービスを再起動して変更を適用します:`sudo systemctl restart mysql`。
## 解決策2:wp-config.phpを調整する(共有ホスティングに最適)共有ホスティング(BluehostやHostGatorなど)を利用している場合、サーバー変数を変更するためのルート権限がない可能性があります。代わりに、WordPressに3バイトの文字セットを使用するように指示できます。これにより、インデックスサイズは**255 × 3 = 765バイト**に下がり、767バイトの制限内に辛うじて収まります。
`wp-config.php`ファイルを開き、次の行を見つけます:

define( 'DB_CHARSET', 'utf8mb4' );


これを次のように変更します:

define( 'DB_CHARSET', 'utf8' );


**警告:**`utf8`に切り替えると、完全な絵文字サポートが失われます。ユーザーが😭のような絵文字を投稿すると、文字化けしたり、クエスチョンマークとして表示されたりする可能性があります。
## 解決策3:インデックスの長さを手動で短縮する特定のテーブルのみを修正すればよい場合もあります。カラムを手動で変更して、255文字ではなく191文字を使用するようにできます。**191 × 4 = 764バイト**となるため、データベースはエラーを出さずに受け入れます。

ALTER TABLE wp_options MODIFY option_name varchar(191);


エラーログを確認して、どのテーブルとカラムが1071エラーを引き起こしたかを特定し、`wp_options`と`option_name`をログで見つかった名前に置き換えてください。
## 修正の確認方法すべてがスムーズに動作しているか確認するために、以下の点を確認してください:
- **VPSの場合:**`SHOW VARIABLES LIKE 'innodb_large_prefix';`を実行します。`ON`と表示されれば準備完了です。- **共有ホスティングの場合:**データベースから作成途中のテーブルを削除し、WordPressのインストールを再開します。これでエラーなく完了するはずです。- **プラグインの確認:**クラッシュの原因となったプラグインを再度有効化してみてください。正常にテーブルが生成されるはずです。これらの修正は有効ですが、767バイトの制限はサーバーが古いことの兆候です。最高のセキュリティとパフォーマンスを得るために、これらの制限が問題にならない**MySQL 8.0**または**MariaDB 10.5**以上へのアップグレードを検討してください。

Related Error Notes