ハマログ

株式会社イーツー・インフォの社員ブログ

Laravelでutf8mb4対応

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’,」が必要でした。

character setDBLaravelMariaDBmysqlutf8mb4エンコードキャラクターセット文字コード文字化け

Shin.A   Shin.A   2017年6月22日


関連記事

Laravelのjsonレスポンスでスラッシュをエスケープしない

Laravelでjson形式のレスポンスを返却する際に、内部でjson_enco…

ReactPHPをLaravelで実行してみた

以前、ReactPHPを使用していたことがあるので、Laravelで実行させてみ…

GitリポジトリができたのでEclipseからうごかすマニュアル

こんにちは、かねこです。 この記事には、EclipseにEGitプラグインを設定…


← 前の投稿

次の投稿 →