Lorsque j'enregistre la chaîne de chinois, mysql génère l'erreur "Valeur d'exception:
(1366, "Valeur de chaîne incorrecte: '\ xE5\xB0\x8F\xE6\x98\x8E' pour la colonne 'nom' à la ligne 1") ", je vérifie le caractère de mysql, cela montre ceci:
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)
Et mon docker-compose.yml est en tant que boursier:
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"
Je sais comment définir le caractère de mysql avec my.cnf, mais comment puis-je le faire dans le docker-compose.yml? Quelqu'un le sait? Merci!
Vous pouvez soit créer votre propre image mysql où vous modifiez my.cnf, soit modifier la commande qui démarre le démon de mysql avec --character-set-server=utf8mb4
et --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']
Je recommande d'utiliser utf8mb4, car il peut stocker jusqu'à "4 octets par caractère multi-octets" ( https://dev.mysql.com/doc/refman/5.5/en/charset-unicode-utf8mb4.html =)
Le fichier de composition est utilisé pour exécuter des conteneurs (et peut créer des images). Vous ne pouvez pas personnaliser les images à l'intérieur du fichier docker-compose. Vous devez créer une image personnalisée qui étend l'image mysql. Créez un Dockerfile:
FROM mysql:5.7
RUN <command to update my.cnf>
Construisez ensuite cette image:
docker build -t <image-name> .
Mettre à jour le fichier de composition:
db:
image: <image-name-specified-above>
Si vous souhaitez créer votre propre image Docker avec les paramètres ci-dessus, au lieu de les spécifier dans Docker-compose, vous pouvez le faire comme suit:
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"]