DockerのMySQLの文字コードをutf8mb4にする

環境

結論

  • docker-compose.ymlでcommandを追加してcharacterを設定した

状況

  • 先日Docker(docker-compose)でMySQLのimageをしてDjangoの環境を作ったのですが、いざDatabaseに保存してみたらエラーが出てしまいました

  • 以下エラー文

jango.db.utils.OperationalError: (1366, "Incorrect string value: '\\xE3\\x81\\xAF\\xE3\\x81\\x98...' for column 'column名' at row 1")

調査

  • とりあえずググる
  • 文字コードの関係で日本語が保存できない様子
    • 英語だったら普通に保存された
  • mysqlのコンテナに入ってmysql -u root -pmysqlにログイン
  • database選択
  • variablesに設定されている値を確認
mysql> show variables like "chara%";
  • デフォルトでlatin1が設定されていた

utf8mb4(utf8)に変更する

  • 日本語が使用できて現状最も多様性がありそうなutf8mb4に変更する
    • utf8でもいいが、utf8mb4だと絵文字や難しい漢字とかが使えるとのこと
  • dbのservicesにcommandを追加した
command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

参考

MySQLの文字コード事情 2017版