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のリセットをしても大きな被害を受けることはないでしょう。
しかし、アプリによっては、絵文字に対応させたいという方も多いかと思いますので、その方はまた別の方法を試してみてくださいね。
コメント