- 1 1. Introduction
- 2 2. Principales causes du texte japonais illisible
- 2.1 Pourquoi MySQL n’affiche‑t‑il pas correctement le japonais ?
- 2.2 Cause 1 : Le jeu de caractères par défaut reste latin1
- 2.3 Cause 2 : Incohérence du jeu de caractères entre le client et le serveur
- 2.4 Cause 3 : Paramètres incohérents de la base, de la table et des colonnes
- 2.5 Résumé : La plupart des problèmes proviennent de jeux de caractères incompatibles
- 3 3. Comment vérifier les paramètres du jeu de caractères MySQL
- 4 4. Comment configurer MySQL pour gérer correctement le japonais
- 4.1 Dites adieu au mojibake avec les bons paramètres
- 4.1.1 4.1 Configuration côté client : définir explicitement lors de la connexion
- 4.1.2 ✅ Remarque :
- 4.1.3 4.2 Configuration côté serveur : paramètres persistants via my.cnf
- 4.1.4 ✅ Notes importantes :
- 4.1.5 4.3 Spécifier les jeux de caractères pour les bases de données et les tables
- 4.1.6 4.4 Jeu de caractères recommandé : pourquoi utf8mb4 ?
- 4.1 Dites adieu au mojibake avec les bons paramètres
- 5 5. Gestion du japonais dans un environnement Docker
- 6 6. Problèmes courants et comment les résoudre
- 6.1 Vous voyez toujours du texte illisible après la configuration ? La cause peut persister
- 6.1.1 Problème 1 : Les changements de configuration n’ont pas d’effet
- 6.1.2 Problème 2 : Le japonais apparaît illisible dans le terminal
- 6.1.3 Problème 3 : Bases de données ou tables existantes créées avec latin1
- 6.1.4 Problème 4 : Incohérence d’encodage des caractères dans les applications PHP ou Python
- 6.1.5 Problème 5 : Texte illisible lors de l’import/export de fichiers CSV ou Excel
- 6.2 Liste de vérification complète du dépannage
- 6.1 Vous voyez toujours du texte illisible après la configuration ? La cause peut persister
- 7 7. Conclusion
- 8 8. FAQ
- 8.1 Questions courantes sur le support MySQL du japonais
- 8.1.1 Q1. Le texte japonais apparaît comme « ??? ». Quelle est la cause ?
- 8.1.2 Q2. J’ai défini utf8mb4 dans my.cnf, mais cela ne s’applique pas.
- 8.1.3 Q3. Les tables existantes contiennent du japonais corrompu. Peut-on les réparer ?
- 8.1.4 Q4. J’utilise MySQL dans Docker et je rencontre du texte japonais corrompu.
- 8.1.5 Q5. Quelle est la différence entre utf8 et utf8mb4 ? Lequel devrais-je utiliser ?
- 8.1.6 Q6. Les fichiers CSV exportés depuis Excel deviennent corrompus. Que faire ?
- 8.1 Questions courantes sur le support MySQL du japonais
1. Introduction
Vous avez des problèmes pour gérer le japonais dans MySQL ? Causes et solutions complètes expliquées
MySQL est largement utilisé comme base de données pour les applications web et WordPress. Cependant, avez‑vous déjà rencontré des problèmes tels que du texte japonais illisible ou des caractères affichés sous forme de « ??? » ?
Ce problème apparaît fréquemment chez les débutants et dans les environnements de développement locaux comme XAMPP, MAMP ou les configurations virtualisées telles que Docker. La cause principale est une mauvaise configuration du jeu de caractères dans MySQL.
Dans cet article, nous expliquons clairement comment configurer correctement MySQL pour gérer le texte japonais, ainsi que les problèmes courants et leurs solutions.
Nous incluons également des conseils pratiques pour des environnements réels, comme la configuration Docker, les paramètres my.cnf et la modification de bases de données existantes. Ce guide convient à la fois aux débutants et aux ingénieurs professionnels.
Dans la section suivante, nous examinerons la raison fondamentale pour laquelle les caractères japonais deviennent illisibles.
2. Principales causes du texte japonais illisible
Pourquoi MySQL n’affiche‑t‑il pas correctement le japonais ?
Si le texte japonais apparaît sous forme de « ??? » ou de symboles illisibles dans MySQL, la cause est presque certainement des paramètres de jeu de caractères incorrects. MySQL est très flexible, mais si le jeu de caractères et le collation ne correspondent pas, les données ne peuvent pas être stockées et récupérées correctement.
Voici les trois causes les plus fréquentes.
Cause 1 : Le jeu de caractères par défaut reste latin1
Les anciennes versions de MySQL ou les installations par défaut utilisent parfois latin1 (encodage des langues d’Europe occidentale). Comme latin1 ne peut pas gérer correctement le japonais, les caractères sont corrompus dès l’insertion. Cela signifie que les données sont déjà corrompues lorsqu’elles sont stockées dans la base.
Cause 2 : Incohérence du jeu de caractères entre le client et le serveur
MySQL implique le jeu de caractères à trois étapes :
- Lors de la transmission depuis le client (
character_set_client) - Lors du traitement côté serveur (
character_set_server) - Lors de la sortie des résultats (
character_set_results)
Par exemple, même si le client utilise utf8mb4, si le serveur traite les données comme latin1, la corruption survient pendant le traitement. Cette incohérence est l’un des pièges les plus courants.
Cause 3 : Paramètres incohérents de la base, de la table et des colonnes
Lors de la création de nouvelles tables sans spécifier explicitement un jeu de caractères, MySQL applique sa configuration par défaut. Cela peut entraîner des réglages incohérents tels que :
- Base de données :
utf8mb4 - Table :
utf8 - Colonne :
latin1
Une telle incohérence provoque du texte illisible lors du stockage et de l’affichage.
Résumé : La plupart des problèmes proviennent de jeux de caractères incompatibles
Dans la majorité des cas, le texte japonais illisible dans MySQL résulte d’un désalignement des jeux de caractères configurés. Dans la section suivante, nous expliquerons comment vérifier les paramètres d’encodage actuels dans MySQL. Une vérification correcte vous permet d’identifier et de corriger rapidement le problème.
3. Comment vérifier les paramètres du jeu de caractères MySQL
La première étape pour trouver la cause est de vérifier les paramètres actuels
Lorsque MySQL ne parvient pas à gérer correctement le japonais, la première chose à vérifier est les paramètres actuels du jeu de caractères et du collation.
Dans MySQL, plusieurs jeux de caractères sont échangés entre le client et le serveur, et ils doivent correspondre.
Nous allons ici expliquer comment vérifier ces paramètres à l’aide de la ligne de commande et de requêtes SQL.
Vérifier les jeux de caractères avec la commande SHOW VARIABLES
Une fois connecté à MySQL, exécutez la requête SQL suivante pour inspecter la configuration actuelle du jeu de caractères :
SHOW VARIABLES LIKE 'character_set%';
Après l’exécution de cette commande, vous obtiendrez un résultat similaire à celui‑ci‑dessous :
+--------------------------+---------+
| Variable_name | Value |
+--------------------------+---------+
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database | utf8mb4 |
| character_set_results | utf8mb4 |
| character_set_server | utf8mb4 |
| character_set_system | utf8 |
+--------------------------+---------+
Ce que signifie chaque paramètre
| Setting | Meaning and Role |
|---|---|
character_set_client | The encoding of strings sent from the client |
character_set_connection | The character set used during client-to-server communication |
character_set_results | The character set used when query results are returned to the client |
character_set_database | The default character set of the currently selected database |
character_set_server | The default character set used when creating new databases and tables |
character_set_system | The character set used internally by the server (usually no need to change) |
En particulier, il est crucial que character_set_client, character_set_connection et character_set_results correspondent tous. S’ils diffèrent, les chaînes peuvent être corrompues lors de l’envoi ou du retour.
Points de contrôle pour éviter le texte corrompu
- Confirmer que tous les éléments sont réglés sur
utf8mb4 - Si plusieurs jeux de caractères sont mélangés, appliquer les changements de configuration introduits plus tard
- Attention : les tables et les colonnes peuvent avoir leurs propres paramètres de jeu de caractères
Remarque : Vérifiez également les paramètres de collation
La collation affecte l’ordre des chaînes et le comportement de comparaison. Vous pouvez la vérifier avec :
SHOW VARIABLES LIKE 'collation%';
La collation est moins susceptible de provoquer directement du mojibake, mais elle affecte le tri et la précision de recherche pour le texte japonais. Il est rassurant de confirmer que des paramètres tels que utf8mb4_general_ci ou utf8mb4_unicode_ci sont utilisés.
Dans la section suivante, nous expliquerons des méthodes de configuration concrètes pour gérer correctement le japonais dans MySQL, y compris comment modifier ces paramètres.
4. Comment configurer MySQL pour gérer correctement le japonais
Dites adieu au mojibake avec les bons paramètres
Pour gérer correctement le japonais dans MySQL, il est essentiel de standardiser tous les paramètres de jeu de caractères. En particulier, utf8mb4 est le choix recommandé car il prend en charge non seulement le japonais, mais aussi les emojis et les caractères spéciaux.
Dans cette section, nous expliquons des méthodes de configuration concrètes pour le côté client, le côté serveur, et les niveaux base de données/table/colonne.
4.1 Configuration côté client : définir explicitement lors de la connexion
Immédiatement après s’être connecté à MySQL, exécutez la commande suivante pour verrouiller le jeu de caractères de la connexion sur utf8mb4 :
SET NAMES 'utf8mb4';
Cette commande s’applique simultanément aux trois variables suivantes :
character_set_clientcharacter_set_connectioncharacter_set_results
✅ Remarque :
- Si vous vous connectez depuis PHP, écrivez quelque chose comme
mysqli_set_charset($conn, 'utf8mb4');. - Lors de l’utilisation de la commande CLI
mysql, spécifier--default-character-set=utf8mb4est également efficace.
4.2 Configuration côté serveur : paramètres persistants via my.cnf
En ajoutant des paramètres comme ceux-ci à my.cnf (ou my.ini), vous pouvez changer le jeu de caractères par défaut pour l’ensemble du serveur MySQL en utf8mb4 :
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
character-set-server = utf8mb4 collation-server = utf8mb4_general_ci
✅ Notes importantes :
- Vous devez redémarrer MySQL après avoir modifié la configuration.
- Exemple :
sudo systemctl restart mysql(Linux) - L’emplacement du fichier varie selon l’environnement. Les chemins Linux courants incluent
/etc/mysql/my.cnfet/etc/my.cnf.
4.3 Spécifier les jeux de caractères pour les bases de données et les tables
Lors de la création de nouvelles bases de données ou tables, spécifiez explicitement le jeu de caractères :
Exemple : création d’une base de données
CREATE DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
Exemple : création d’une table
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100)
) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
Si vous devez convertir une table existante
ALTER TABLE users CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
4.4 Jeu de caractères recommandé : pourquoi utf8mb4 ?
MySQL possède également un jeu de caractères appelé utf8, mais il ne prend en charge que jusqu’à 3 octets par caractère UTF-8. En conséquence, les emojis et certaines variantes de kanji ne peuvent pas être stockés correctement.
En revanche, utf8mb4 prend en charge jusqu’à 4 octets et est donc entièrement compatible UTF-8. C’est pourquoi il est devenu la recommandation standard aujourd’hui.
Dans le chapitre suivant, nous expliquerons les paramètres et précautions liés au japonais spécifiques aux environnements Docker. Couvrons les points clés pour éviter le mojibake même dans les configurations de développement conteneurisées.
5. Gestion du japonais dans un environnement Docker
Assurer un support japonais adéquat dans les environnements conteneurisés
Ces dernières années, Docker est devenu un environnement de développement courant. Cependant, de nombreux développeurs signalent que « le texte japonais devient illisible dans MySQL exécuté sur Docker ». Cela se produit généralement parce que les paramètres de locale du conteneur ou la configuration initiale de MySQL ne sont pas correctement configurés.
Dans cette section, nous présentons des solutions pratiques pour gérer correctement le japonais lors de l’utilisation de MySQL dans Docker.
5.1 Configurer le support de la locale dans le Dockerfile
Si votre serveur d’application (pas seulement le conteneur MySQL) doit gérer le japonais, une configuration de locale est nécessaire. Voici un exemple pour un Dockerfile basé sur Debian :
RUN apt-get update && apt-get install -y locales \
&& locale-gen ja_JP.UTF-8 \
&& update-locale LANG=ja_JP.UTF-8
ENV LANG=ja_JP.UTF-8
ENV LC_ALL=ja_JP.UTF-8
✅ Points clés :
- Empêche les erreurs d’encodage lors de la lecture ou de l’écriture de fichiers japonais côté application.
- Affecte non seulement MySQL mais aussi les environnements d’exécution tels que PHP et Python.
5.2 Spécifier les jeux de caractères dans docker-compose
Lors du lancement d’un conteneur MySQL avec docker-compose.yml, vous pouvez spécifier les jeux de caractères comme suit :
services:
db:
image: mysql:8.0
container_name: mysql-ja
environment:
MYSQL_ROOT_PASSWORD: rootpass
MYSQL_DATABASE: mydb
MYSQL_USER: user
MYSQL_PASSWORD: password
TZ: Asia/Tokyo
LANG: ja_JP.UTF-8
LC_ALL: ja_JP.UTF-8
command:
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
ports:
- "3306:3306"
volumes:
- ./mysql-data:/var/lib/mysql
✅ Notes supplémentaires :
- La section
command:vous permet de transmettre des paramètres de démarrage à MySQL. TZetLANGaident à garantir un environnement compatible avec le japonais.
5.3 Vérifier le support du japonais à l’intérieur du conteneur MySQL
Pour confirmer que MySQL est correctement configuré avec utf8mb4, entrez dans le conteneur et vérifiez :
docker exec -it mysql-ja mysql -u root -p
Après vous être connecté, exécutez :
SHOW VARIABLES LIKE 'character_set%';
Si tous les paramètres pertinents sont utf8mb4, le stockage et l’affichage du texte japonais devraient fonctionner de manière fiable.
Résumé : Dans Docker, les paramètres de démarrage et la locale sont critiques
Pour gérer en toute sécurité le japonais dans MySQL sous Docker :
- Spécifiez explicitement
utf8mb4lors du démarrage du conteneur MySQL - Définissez la locale du conteneur d’application sur
ja_JP.UTF-8
Ces pré-configurations sont extrêmement importantes.
Dans la section suivante, nous aborderons les problèmes fréquemment signalés et leurs solutions pratiques.
6. Problèmes courants et comment les résoudre
Vous voyez toujours du texte illisible après la configuration ? La cause peut persister
Même après avoir modifié les paramètres MySQL en utf8mb4, le texte japonais peut toujours ne pas s’afficher ou s’enregistrer correctement. Dans cette section, nous présentons les problèmes fréquemment signalés et leurs solutions pratiques.
Problème 1 : Les changements de configuration n’ont pas d’effet
Cause :
Après avoir modifié des fichiers de configuration tels que my.cnf ou docker-compose.yml, MySQL n’a pas été redémarré.
Solution :
- Environnement serveur :
sudo systemctl restart mysql - Environnement Docker :
docker-compose down→docker-compose up -d
Problème 2 : Le japonais apparaît illisible dans le terminal
Cause :
Le problème peut ne pas venir de MySQL lui-même mais de l’encodage d’affichage du terminal. Par exemple, l’invite de commande Windows peut ne pas afficher correctement l’UTF-8.
Solution :
- Windows : passez à l’UTF‑8 avec
chcp 65001 - macOS/Linux : assurez‑vous que l’encodage du terminal est réglé sur UTF‑8 (généralement par défaut)
Problème 3 : Bases de données ou tables existantes créées avec latin1
Cause :
Si les bases de données ou les tables existantes ont été créées à l’origine avec latin1, les données japonaises peuvent déjà être corrompues.
Solution :
Vérifiez la structure de la table :
SHOW CREATE TABLE your_table_name;Convertissez le jeu de caractères de la table :
ALTER TABLE your_table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
Important :
Les données déjà corrompues ne peuvent pas être réparées uniquement par conversion. Envisagez de restaurer à partir d’une sauvegarde ou de corriger manuellement les données.
Problème 4 : Incohérence d’encodage des caractères dans les applications PHP ou Python
Cause :
Même si MySQL utilise utf8mb4, des caractères illisibles apparaissent si l’application envoie des données dans un encodage différent.
Solution :
- PHP :
mysqli_set_charset($conn, "utf8mb4"); - Python (MySQL Connector) : spécifiez
charset='utf8mb4'lors de la connexion
Problème 5 : Texte illisible lors de l’import/export de fichiers CSV ou Excel
Cause :
Les fichiers CSV ou Excel peuvent utiliser Shift_JIS ou UTF-8 avec BOM, ce qui peut ne pas correspondre à la configuration utf8mb4 de MySQL.
Solution :
- Convertissez les fichiers CSV en UTF‑8 avant l’importation
- Exécutez explicitement
SET NAMES 'utf8mb4';avant l’exportation - Lors de l’enregistrement depuis Excel, choisissez le format « UTF-8 (avec BOM) »
Liste de vérification complète du dépannage
| Checkpoint | Status |
|---|---|
All character_set_* variables are utf8mb4 | ✅ |
collation_server is utf8mb4_general_ci | ✅ |
| Database, table, and column character sets are explicitly defined | ✅ |
Application sends data using utf8mb4 | ✅ |
| Environment (terminal/editor) encoding is UTF-8 | ✅ |
Dans la section suivante, nous résumerons les points clés et fournirons des recommandations finales pour gérer en toute sécurité le japonais dans les environnements MySQL.
7. Conclusion
Revoir les concepts essentiels et les paramètres pour gérer le japonais dans MySQL
Pour gérer correctement le japonais dans MySQL, il ne suffit pas de supposer que « mettre utf8 suffit ». Ce qui compte réellement, c’est la cohérence de la configuration et la compréhension de l’ensemble du flux de données.
Points clés abordés dans cet article :
- La principale cause du mojibake japonais est l’utilisation de jeux de caractères inappropriés tels que
latin1ou des paramètres incohérents entre le client et le serveur. - Les paramètres de jeu de caractères de MySQL peuvent être vérifiés avec la commande
SHOW VARIABLES. - Le jeu de caractères recommandé est
utf8mb4. Il est entièrement compatible UTF‑8 et prend en charge les emojis ainsi que les caractères kanji étendus. - La configuration doit être appliquée à trois niveaux : client, serveur et niveau base de données/table.
- Dans les environnements Docker, spécifier
command:etLANGest essentiel . La locale et le jeu de caractères doivent être correctement configurés. - En cas de problème, isolez et dépannez étape par étape . Vérifiez non seulement MySQL lui‑-même, mais aussi le terminal, la couche application et les interactions avec les données externes.
Bonnes pratiques pour les opérations futures
- Lors de la mise en place d’un nouvel environnement MySQL, concevez‑le avec
utf8mb4comme valeur par défaut dès le départ . - Dans le développement en équipe ou multi‑environnements, documentez et partagez les fichiers de configuration et les paramètres de connexion .
- Dans les environnements Docker ou CI/CD, l’automatisation de la configuration via des variables d’environnement et des fichiers de configuration gérés est essentielle.
- Lors de l’import/export de données, envisagez d’utiliser des outils de conversion d’encodage comme iconv ou nkf .
Réflexions finales
Une fois votre environnement MySQL correctement configuré pour le japonais, le développement et les opérations courantes deviennent nettement plus fluides.
Comprendre « pourquoi le mojibake se produit » et « quels paramètres doivent être configurés » vous permet de prévenir les problèmes avant qu’ils n’apparaissent et d’assurer un traitement stable des données.
Nous espérons que ce guide vous aidera à créer un environnement de développement plus fiable et plus confortable.
8. FAQ
Questions courantes sur le support MySQL du japonais
Q1. Le texte japonais apparaît comme « ??? ». Quelle est la cause ?
A. La cause la plus fréquente est une incompatibilité d’encodage de caractères. Par exemple, si le client envoie du texte japonais en utilisant utf8mb4 mais que le serveur le reçoit en latin1, un mojibake se produit.
L’exécution de SET NAMES 'utf8mb4'; lors de la connexion résout de nombreux cas.
Q2. J’ai défini utf8mb4 dans my.cnf, mais cela ne s’applique pas.
A. Modifier simplement my.cnf ne suffit pas. Vous devez redémarrer le serveur MySQL.
Sous Linux, exécutez sudo systemctl restart mysql. Dans Docker, lancez docker-compose down puis docker-compose up -d.
Q3. Les tables existantes contiennent du japonais corrompu. Peut-on les réparer ?
A. Une récupération complète peut être difficile, mais vous pouvez essayer les étapes suivantes :
- Vérifiez la structure de la table (
SHOW CREATE TABLE) - Convertissez le jeu de caractères
ALTER TABLE your_table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
Si les données sont déjà corrompues, la restauration à partir d’une sauvegarde ou une correction manuelle peut être nécessaire.
Q4. J’utilise MySQL dans Docker et je rencontre du texte japonais corrompu.
A. En plus des paramètres MySQL, vous devez configurer la locale dans votre Dockerfile ou docker-compose.yml (par ex., LANG=ja_JP.UTF-8).
Spécifiez également explicitement --character-set-server=utf8mb4 lors du démarrage du conteneur MySQL.
Q5. Quelle est la différence entre utf8 et utf8mb4 ? Lequel devrais-je utiliser ?
A. Le utf8 de MySQL ne prend en charge que les caractères UTF-8 sur 3 octets. En revanche, utf8mb4 prend en charge les caractères sur 4 octets, y compris les emojis et les kanjis étendus.
Du point de vue de la compatibilité et de la pérennité, utf8mb4 est fortement recommandé.
Q6. Les fichiers CSV exportés depuis Excel deviennent corrompus. Que faire ?
A. Excel peut utiliser par défaut Shift_JIS ou UTF-8 avec BOM, ce qui peut entrer en conflit avec les paramètres MySQL.
Enregistrez le fichier CSV explicitement au format UTF-8, ou exécutez SET NAMES 'utf8mb4'; avant l’importation pour aligner les encodages.
Si ces FAQ ne résolvent pas votre problème, revoyez votre configuration depuis le départ ou envisagez de reconstruire l’environnement selon les instructions.
Aborder les défis techniques avec patience est la clé pour gérer correctement les données japonaises dans MySQL.


