中国語の文字列を保存すると、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でこれを行うにはどうすればよいですか?誰か知ってる?ありがとう!
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 =)
構成ファイルは、コンテナーの実行に使用されます(イメージをビルドできます)。 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>
上記の設定で独自の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"]