主に絵文字(4バイト文字)を格納する際にMySQL標準のutf8では対応できず、utf8mb4を使用する必要があるがその対応方法がMySQLのバージョンによって多少異なるので対応方法のまとめ。
基本的にゴールは同じだがMySQL5.7.7以降character-setでutf8mb4に指定する以外の部分はデフォルト値になったので変更する必要がなくなった。
- character-set周りをutf8mb4に変更
- innodb_large_prefixを有効
- innodb_file_format=Barracudaに変更
- ROW_FORMAT=DINAMICに変更
バージョンごとの動作についてはこちらのページのおかげで理解できた。感謝。
Rails側のdatabase.ymlでの指定についても上記サイトに記載されているが一番厳格なcollationを指定(utf8mb4_bin)すれば、
一番厳格に判定してくれるので良いと思うが用途に応じて選択すると良い。
Amazon AuroraのMySQL互換はMySQL5.6がベースになっているので5.7.7ではデフォルトになった設定がデフォルトになってないので対応が必要になった。