web-dev-qa-db-ja.com

docker-composeを使用してmysqlのデフォルトの文字セットを変更するにはどうすればよいですか?

中国語の文字列を保存すると、mysqlで「例外値:
(1366、 "不正な文字列値: '\ xE5\xB0\x8F\xE6\x98\x8E' for column 'name' at row 1") "、私はmysqlの文字をチェックし、これを示します:

mysql> show variables like 'character%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | latin1                     |
| character_set_connection | latin1                     |
| character_set_database   | latin1                     |
| character_set_filesystem | binary                     |
| character_set_results    | latin1                     |
| character_set_server     | latin1                     |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

そして私のdocker-compose.ymlは仲間です:

web:
    image: yetongxue/docker_test:1.2
    links:
      - "db"
    ports:
      - "8100:8000"
    volumes:
      - "/Users/yetongxue/docker_v/docker_test/media:/root/media"
    restart: always

db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: qwerasdf
      MYSQL_DATABASE: docker_db
    restart: always
    volumes:
      - "/Users/yetongxue/docker_v/docker_test/db:/var/lib/mysql"

My.cnfでmysqlの文字を設定する方法を知っていますが、docker-compose.ymlでこれを行うにはどうすればよいですか?誰か知ってる?ありがとう!

12
xander-ye

My.cnfを変更する独自のmysqlイメージを構築するか、mysqlのデーモンを開始するコマンドを--character-set-server=utf8mb4および--collation-server=utf8_unicode_ciで変更することができます。

web:
    image: yetongxue/docker_test:1.2
    links:
      - "db"
    ports:
      - "8100:8000"
    volumes:
      - "/Users/yetongxue/docker_v/docker_test/media:/root/media"
    restart: always

db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: qwerasdf
      MYSQL_DATABASE: docker_db
    restart: always
    volumes:
      - "/Users/yetongxue/docker_v/docker_test/db:/var/lib/mysql"
    command: ['mysqld', '--character-set-server=utf8mb4', '--collation-server=utf8mb4_unicode_ci']

「マルチバイト文字あたり最大4バイト」を格納できるため、utf8mb4の使用をお勧めします( https://dev.mysql.com/doc/refman/5.5/en/charset-unicode-utf8mb4.html =)

17
Javier Arias

構成ファイルは、コンテナーの実行に使用されます(イメージをビルドできます)。 docker-composeファイル内のイメージをカスタマイズすることはできません。 mysqlイメージを拡張するカスタムイメージを作成する必要があります。 Dockerfileを作成します。

FROM mysql:5.7
RUN <command to update my.cnf>

次に、このイメージをビルドします。

docker build -t <image-name> .

作成ファイルを更新:

db:
    image: <image-name-specified-above>
0
yamenk

上記の設定で独自のdockerイメージを作成したい場合は、それらをdocker-composeで指定する代わりに、次のようにできます。

FROM mysql:5.5.60

RUN ln -sf /usr/share/zoneinfo/Europe/London /etc/localtime

VOLUME ["/docker-entrypoint-initdb.d"]

CMD ["--character-set-server=utf8mb4", "--collation-server=utf8mb4_general_ci", "--skip-character-set-client-handshake"]
0
Javier Arias