Docker Compose で立ち上げる MySQL の文字コード(charset)を utf8mb4 にする

現象(状態)

日本語を保存したところ、格納されたデータが ???? になってしまって悲しい状態のときに 。

大切なこと

コンテナ作成時に文字コードを指定しないといけません*1

結論

以下のような docker-compose.yml を書きます*2command: で文字コードを指定します。volumes はまあ良きに計らうといいと思います。

version: '3'

services:
  mysql:
    image: mysql
    command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    environment:
      MYSQL_ROOT_PASSWORD: 'KOKONI_PASSWORD_GA_HAIRU'
    volumes:
      - ./mysql_data:/var/lib/mysql

補足

  • 上記に加えて ports: を設定し、ホスト側の空きポートにどんどん割り当てていけばどんどん MySQL が建てられます
  • 私は上記に加えて念のため、コンテナ側の /etc/mysql/mysql.conf.d/mysqld.cnf/opt を共有しています*3
  • また私は、command: ではさらに --secure-file-priv="" を指定しています

*1:稼働中のコンテナの文字コードを変更するのは不可能ではないですが、まあやめたほうがいいと思います(データだけdumpして乗せ換えたほうがいい)

*2:ほぼ最小限です

*3:……がそれが役に立ったことは今のところないです……

Powered by はてなブログ