3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-10-22

エラーの忘備録
#エラー内容
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

で、もう一度データベースを作り直してあげる必要があります。

#おわりに
もし間違えている点などございましたら、ご指摘いただけましたら幸いです。
読んでいただきありがとうございました!

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?