Maison > Article > Opération et maintenance > Analyser et résoudre le problème du code mysql tronqué dans Docker
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!