niki12260714の日記

フリーランスのITエンジニアの呟き。

AWS Cloud9 + Rails + MySQLで絵文字を扱う

参考にしたのはこちら。

qiita.com

というわけで、MySQL文字コードを確認するわけですが、そっちは既に「utf8mb4」でした。
でもrailsの方で文字コードを「utf8」にしていたので、rake:dbした時にutf8でテーブル作ってしまっていたようなので、これを修正します。

/config/database.ymlを以下のように設定

default: &default
 adapter: mysql2
 charset: utf8mb4
 encoding: utf8mb4
 collation: utf8mb4_unicode_ci
 reconnect: false
 pool: 5
 host: localhost

次にMySQLでAlter tableをします。

alter table (テーブル名) convert to character set utf8mb4;

が、ここでエラー。
「Specified key was too long; max key length is 767 bytes」

ぐぐったら、こちらに原因と修正方法がありましたので、参考にしました。

nabeatsu.hatenablog.com

「sudo vi /etc/my.conf」で以下を追加

innodb_file_format=Barracuda
innodb_file_format_max=Barracuda
innodb_file_per_table=1
innodb_large_prefix=1

「sudo /etc/init.d/mysqld restart」でMySQLを再起動

再びMySQLに入り、

alter table (テーブル名) ROW_FORMAT=DYNAMIC;
alter table (テーブル名) convert to character set utf8mb4;

これで文字コードがutf8mb4に変わり、絵文字が入ります。