MySQLで絵文字を扱おうと、utf8からutf8mb4に変更して試す機会がありました。
開発はLaravel(5.4)なのですが、Laravelは5.4からutf8mb4がデフォルト(?)になったのですね。ただMySQLのバージョンにもよるようですが、テーブルのmigrationでこんなエラーが出たりするというのもネットに見受けられます。自分も当たり前にぶち当たりました。
SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 byte
他の案件で同様のエラーに直面したので、my.cnfの設定に以下
character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci innodb_large_prefix innodb_file_per_table innodb_file_format=barracuda
を追加したりしましたが、もう一つの肝、テーブルのROW_FORMATを”DYNAMIC“にするには、Laravelではどうすれば良いのかわかりませんでした。
が、/config/database.phpのを以下のようにしたところ、migrationにて生成されるテーブルで”ROW_FORMAT=DYNAMIC”となりました。
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'hoge'),
'username' => env('DB_USERNAME', 'hoge'),
'password' => env('DB_PASSWORD', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'strict' => true,
'engine' => 'InnoDB ROW_FORMAT=DYNAMIC',
],
最後の「’engine’ => ‘InnoDB ROW_FORMAT=DYNAMIC’,」が必要でした。





