Maison  >  Article  >  Opération et maintenance  >  Analyser et résoudre le problème du code mysql tronqué dans Docker

Analyser et résoudre le problème du code mysql tronqué dans Docker

PHPz
PHPzoriginal
2023-04-25 09:19:201539parcourir

Docker est une plate-forme de conteneurisation populaire qui rend le déploiement et la gestion des applications plus faciles et plus efficaces. La base de données MySQL fait partie intégrante de nombreuses applications. Cependant, lorsque vous utilisez MySQL dans Docker, vous rencontrez parfois des caractères tronqués, ce qui non seulement affecte l'exactitude des données, mais pose également des problèmes inutiles aux développeurs.

Cet article présentera le problème tronqué de MySQL dans Docker et les solutions possibles.

1. Le problème de code tronqué de MySQL dans Docker

Le code tronqué signifie que les données interrogées sur le client ne répondent pas aux attentes et qu'il existe des caractères ou des comportements méconnaissables.

Ce problème est très courant lors de l'exécution de MySQL dans Docker. Surtout lorsque la méthode d'encodage de la base de données MySQL est définie sur UTF-8, les situations suivantes peuvent se produire :

1 Lors de l'insertion de données, les caractères normaux en chinois ou dans d'autres langues des données deviennent des caractères aléatoires.

2. Lorsque le client interroge des données, les données renvoyées contiennent un grand nombre de caractères tronqués.

En fait, ces problèmes ne sont pas causés par Docker ou MySQL lui-même, mais par des paramètres et configurations incorrects.

2. Solution à MySQL dans Docker

1. Vérifiez le jeu de caractères de la source de données

La cause première des caractères tronqués est que le jeu de caractères de la base de données est incohérent avec le jeu de caractères de la source de données. Nous devons confirmer si le jeu de caractères de la source de données est UTF-8 pour garantir l'exactitude de la transmission des données entre les différents systèmes.

Vérifiez le jeu de caractères par défaut de MySQL dans MySQL via la commande suivante :

show variables like 'character%';

Les caractères_set_client, Character_set_connection et Character_set_results dans les résultats affichés doivent tous être utf8mb4. Sinon, cela peut provoquer des caractères tronqués.

Pour exécuter MySQL dans Docker, vous devez ajouter les paramètres suivants au fichier de configuration Dockerfile ou Docker-compose :

...
environment:
  MYSQL_ROOT_PASSWORD: root
  MYSQL_DATABASE: test
  MYSQL_USER: test
  MYSQL_PASSWORD: test
  MYSQL_CHARSET: utf8mb4
  MYSQL_COLLATION: utf8mb4_unicode_ci
...

Parmi eux, MYSQL_CHARSET et MYSQL_COLLATION sont respectivement le jeu de caractères et la méthode de tri.

2. Modifier le fichier de configuration MySQL

Lors de l'exécution de MySQL dans Docker, vous pouvez également modifier le fichier de configuration MySQL pour obtenir le jeu de caractères et la méthode de tri corrects.

Entrez le fichier de configuration MySQL my.cnf et ajoutez la configuration suivante en bas :

[mysql]
default-character-set=utf8mb4

[mysqld]
collation-server = utf8mb4_unicode_ci
init-connect='SET NAMES utf8mb4'
character-set-server = utf8mb4
skip-character-set-client-handshake

Pour exécuter MySQL dans Docker, vous devez d'abord copier my.cnf dans le conteneur :

...
volumes:
  - ./my.cnf:/etc/mysql/conf.d/my.cnf
...

3. set

Lors de l'exécution de MySQL dans Docker, vous devez vous assurer que le jeu de caractères du client (tel que le système d'exploitation et les outils client MySQL, etc.) est également UTF-8.

Sous Linux, vous pouvez afficher le jeu de caractères du système actuel via la commande suivante :

$ echo $LANG

Si LANG renvoie d'autres jeux de caractères, vous devez ajouter la variable d'environnement LANG à votre fichier de configuration shell :

$ echo "export LANG='en_US.utf8'" >> ~/.bashrc

Dans les systèmes Windows , Vous devez vous assurer que le jeu de caractères de l'outil client (tel que Navicat, etc.) est également UTF-8.

4. Définir les attributs de colonne MySQL

Dans MySQL, le jeu de caractères et les règles de classement dans les attributs de colonne affecteront également l'exactitude des résultats de la requête. Par défaut, les propriétés des colonnes d'une nouvelle table MySQL adoptent les paramètres par défaut du serveur MySQL. Si le jeu de caractères et le classement du serveur MySQL ne correspondent pas, des caractères tronqués peuvent en résulter.

Afin de résoudre ce problème, vous pouvez définir manuellement les attributs de colonne sur :

CREATE TABLE test (
  name VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
...
);

Lors de la création de la table, voici quelques solutions au problème tronqué de MySQL dans Docker. Les développeurs peuvent choisir une méthode qui leur convient en fonction de leurs propres besoins et de leur situation réelle. Dans un environnement de production, afin de garantir la stabilité et la fiabilité du système, le déploiement et la configuration des applications doivent être soigneusement testés et vérifiés.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn