【Rails】Mysql2::Error: Specified key was too long; max key length is 767 bytes エラーを解決

プログラミング

 Railsでアプリをつくる際、rails db:migrateコマンドを打ち込んだら、Mysql2::Error: Specified key was too long; max key length is 767 bytesというエラーが出てしまう。
 このエラーの解消法を紹介します。

エラー解決方法

 手順は大まかに2つあります。

手順1 database.ymlの記述を変更

 エラー解決方法はconfig内にある、database.ymlの記述を変更します。
 以下のようにencodingの部分がutf8mb4になっているのが、今回のエラーの原因です。

 そこで、utf8mb4の記述を以下のようにutf8に変更します。

 これにより、文字カウントと保存されるbite数の計算方法(絵文字に対応するか否か)が変わるので、エラーの原因は排除されます。

手順2 DB(データベース)を作り直す

 上記のように書き直しても、DBがそれを反映していなければ意味がありません。
 そこで、まず rails db:migrate:status と打ち込みます。
 すると、以下のようになりました。

 マイグレーションファイルがdownになっているのが確認できます。
 このようにdown状態になっていることを確認してから、rails db:reset コマンドを打ち込みます。
 これは、DBを一度削除し、再度生成するコマンドです。
 このコマンドを入力することで、DBに先ほどの手順1の変更が反映されました。
 では、改めて、rails db:migrateをしてみましょう。

 エラーなく通ることが確認できるかと思います。

おわりに

 このエラーはアプリケーションを作り始めた際に発生するエラーなので、DBのリセットをしても大きな被害を受けることはないでしょう。
 しかし、アプリによっては、絵文字に対応させたいという方も多いかと思いますので、その方はまた別の方法を試してみてくださいね。

この記事を読んだ方へのおすすめ

コメント