エラーの忘備録
#エラー内容
rails db:migrate
をした時に、以下のエラー文が出ました。(Mysqlのエラー)
Mysql2::Error: Specified key was too long; max key length is 767 bytes
指定したキーが長すぎる
というエラーです。
テーブルに色々カラムを追加すると、キーの制限である767バイトを超えてしまうため
このエラーが起こってしまいます。
#原因
config/database.yml
default: &default
adapter: mysql2
encoding: utf8mb4
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: root
password:
socket: /tmp/mysql.sock
encoding: utf8mb4
という記述のためエラーが出ます。
#解決方法
encoding: utf8
に書き換えます。
config/database.yml
default: &default
adapter: mysql2
encoding: utf8
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: root
password:
socket: /tmp/mysql.sock
utf8mb4とutf8の違いはいまいちわかっていないのですが、utf8mb4は1〜4バイト、utf8は1〜3バイトの文字が格納できるようです。そのためutf8だと、絵文字などは保存できませんが、代わりに容量が大きくなるのではないかな?と推測しました。
すでにrails db:create
でデータベースを作成してしまっている場合は、
% rails db:drop
% rails db:create
か
% rails db:reset
で、もう一度データベースを作り直してあげる必要があります。
#おわりに
もし間違えている点などございましたら、ご指摘いただけましたら幸いです。
読んでいただきありがとうございました!