Mysql2::Error: Specified key was too long; max key length is 767 bytesエラーの解決法
MySql5.6以前のバージョンはこちらの記事が詳しいです
参加した友人とのプロジェクトで以下のコマンドを叩いたところ
bundle exec rake ridgepole:apply
以下のエラーに遭遇しました。
[ERROR] Mysql2::Error: Specified key was too long; max key length is 767 bytes
どうやらmy.cnfファイルが無く、そのせいで文字コードがutf8mb4ではなくutf8になってしまっているのが原因のよう。
mysql> show variables like "chara%";
+--------------------------+----------------------------------------------------------+
| Variable_name | Value |
+--------------------------+----------------------------------------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/local/Cellar/mysql@5.6/5.6.43/share/mysql/charsets/ |
+--------------------------+----------------------------------------------------------+
8 rows in set (0.00 sec)
上記でも紹介した記事を見ると、my.cnfファイルを以下のように編集すれば良いとのことでした。
[mysqld]
...
character-set-server=utf8mb4
[client]
default-character-set=utf8mb4
MySql5.6以前のバージョンはこれで上手くいくと思うのですが、5.6以降は以下のように編集しないとダメなようです。
[mysqld]
character-set-server=utf8mb4
innodb_large_prefix=1
innodb_file_per_table=1
innodb_file_format=Barracuda
innodb_file_format_max=Barracuda
[client]
default-character-set=utf8mb4
使うコマンドは以下。
touch /etc/my.cnf
vi /etc/my.cnf
mysql.server restart
自分の場合はこれで上手くいったので、同じエラーが出た方は試してみてください。