59 votes

Comment afficher les caractères UTF-8 dans phpMyAdmin ?

Ma base de données est correctement configurée en UTF-8 et je suis confronté à une base de données contenant des caractères japonais. Si je fais SELECT *... à partir de la ligne de commande mysql, je vois correctement les caractères japonais. Lorsque je tire des données de la base de données et que je les affiche sur une page Web, je les vois correctement.

Cependant, lorsque je consulte les données de la table dans phpMyAdmin, je ne vois qu'un texte vide.

ç§ã¯ç†ãŒãã§ã™ç†ã'...

Comment puis-je faire en sorte que phpMyAdmin affiche les caractères en japonais ?

Le codage des caractères de la page HTML est défini sur UTF-8.

Editar:

J'ai essayé d'exporter ma base de données et j'ai ouvert le fichier .sql dans geany. Les caractères sont toujours déformés, même si l'encodage est défini sur UTF-8. (Cependant, un mysqldump de la base de données montre également des caractères déformés).

Le jeu de caractères est correctement défini pour la base de données et toutes les tables ('latin' ne se trouve nulle part dans le fichier).

CREATE DATABASE `japanese` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

J'ai ajouté les lignes à my.cnf et redémarré mysql mais il n'y a aucun changement. J'utilise Zend Framework pour insérer des données dans la base de données.

Je vais ouvrir une bourse pour cette question car je veux vraiment la résoudre.

0 votes

Il s'agit probablement d'un problème dans les paramètres de connexion de PhpMYAdmin. Il doit également être explicitement réglé sur UTF-8. Je n'ai pas de copie à portée de main, mais elle se trouve généralement quelque part près de la page d'accueil.

0 votes

Je ne vois ces paramètres nulle part dans phpMyAdmin et les recherches sur Google n'ont rien donné jusqu'à présent.

0 votes

Quelle version de phpMyAdmin utilisez-vous ? La page d'accueil de phpMyAdmin affiche la collation de la connexion MySQL ainsi que le jeu de caractères MySQL - sont-ils tous deux UTF-8 ?

37voto

timdream Points 2930

Malheureusement, phpMyAdmin est l'une des premières applications php qui parle à MySQL du jeu de caractères correctement. Votre problème est très probablement dû au fait que la base de données ne stocke pas les chaînes UTF-8 correctes en premier lieu.

Afin d'afficher correctement les caractères dans phpMyAdmin, les données doivent être correctement stockées dans la base de données. Cependant, la conversion de la base de données dans le jeu de caractères correct casse souvent les applications web qui ne connaissent pas la fonctionnalité liée au jeu de caractères fournie par MySQL.

Puis-je demander : MySQL est-il > version 4.1 ? Pour quelle application web la base de données est-elle destinée ? phpBB ? La base de données a-t-elle été migrée depuis une ancienne version de l'application Web ou une ancienne version de MySQL ?

Je vous conseille de ne pas vous en mêler si l'application Web que vous utilisez est trop ancienne et n'est pas prise en charge. Ne convertissez les bases de données en UTF-8 réel que si vous êtes sûr que l'application web peut les lire correctement.


Editar:

Votre MySQL est > 4.1, ce qui signifie qu'il est compatible avec les jeux de caractères. Quels sont les paramètres de collation du jeu de caractères de votre base de données ? Je suis presque sûr que vous utilisez latin1 qui est le nom MySQL pour ASCII, pour stocker le texte UTF-8 en 'bytes', dans la base de données.

Pour les clients insensibles au jeu de caractères (i.e. mysql-cli et php-mod-mysql), les caractères sont affichés correctement puisqu'ils sont transférés de/vers la base de données sous forme d'octets. Dans phpMyAdmin, les octets sont lus et affichés en tant que caractères ASCII, ce qui explique le texte erroné que vous voyez.

D'innombrables heures ont été passées il y a des années (2005 ?) lorsque MySQL 4.0 est devenu obsolète, dans de nombreuses régions d'Asie. Il existe une manière standard de traiter votre problème et les données englouties :

  1. Sauvegardez votre base de données comme .sql
  2. Ouvrez-le dans un éditeur de texte compatible UTF-8, vérifiez qu'ils sont corrects.
  3. Cherchez charset collation latin1_general_ci , remplacer latin1 a utf8 .
  4. Enregistrez comme un nouveau fichier sql, n'écrasez pas votre sauvegarde.
  5. Importez le nouveau fichier, ils apparaîtront maintenant correctement dans phpMyAdmin, et les japonais sur votre application web deviendront des points d'interrogation. C'est normal.
  6. Pour vos applications web en php qui dépendent de php-mod-mysql, insérez mysql_query("SET NAMES UTF8"); après mysql_connect() maintenant les points d'interrogation disparaîtront.
  7. Ajoutez la configuration suivante my.ini pour mysql-cli :

    # CLIENT SECTION
    [mysql]
    default-character-set=utf8
    # SERVER SECTION
    [mysqld]
    default-character-set=utf8

Pour plus d'informations sur le charset sur MySQL, veuillez vous référer au manuel : http://dev.mysql.com/doc/refman/5.0/en/charset-server.html

Notez que je suppose que votre application web utilise php-mod-mysql pour se connecter à la base de données (d'où l'utilisation de l'option de connexion par défaut). mysql_connect() ), puisque php-mod-mysql est la seule extension à laquelle je pense qui déclenche encore le problème À CE JOUR.

phpMyAdmin utilise php-mod-mysqli pour se connecter à MySQL. Je n'ai jamais appris à l'utiliser car je suis passé aux frameworks* pour développer mes projets php. Je vous encourage vivement à faire de même.

  • De nombreux frameworks, par exemple CodeIgniter, Zend, utilisent mysqli ou pdo pour se connecter aux bases de données. Les fonctions mod-mysql sont considérées comme obsolètes pour des raisons de performances et d'évolutivité. De plus, vous ne souhaitez pas lier votre projet à un type de base de données spécifique.

1 votes

MySQL version 5.1.41. Comme je l'ai écrit, si j'exécute une instruction SELECT à partir de la ligne de commande mysql, je vois les caractères japonais correctement et je les vois correctement sur la page Web ; il s'agit donc d'un problème spécifique à phpMyAdmin. La base de données est destinée à ma propre application web que je développe. Ce n'est pas phpBB et elle n'a pas été migrée depuis quoi que ce soit. Je ne parle pas de la conversion en UTF-8. Tous les champs de texte ont été définis en UTF-8 depuis le début.

3 votes

+1 La ligne de commande, en particulier sous Windows, n'est pas du tout un indicateur fiable de l'encodage ; phpMyAdmin a généralement raison.

1 votes

Nouvelle réponse pour vous. Il y a probablement des tonnes d'articles qui traitent de la même chose, si vous ne vous contentez pas du mien, cherchez sur Google "SET NAMES UTF8".

30voto

Naama Katiee Points 483

Si vous utilisez PDO, n'oubliez pas de le lancer avec UTF8 :

 $con = new PDO('mysql:host=' . $server . ';dbname=' . $db . ';charset=UTF8', $user, $pass,  array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));

(je viens de passer 5 heures à trouver cette solution, j'espère que cela fera gagner un temps précieux à quelqu'un...)

0 votes

Cela a fonctionné pour moi aussi, en utilisant PDO, une table MySQL configurée en utf8_bin, des caractères chinois, en utilisant XAMPP sur Windows 10, heureusement j'ai trouvé celui-ci en 5 heures.

16voto

Matt McCormick Points 3119

J'ai fait un peu plus de recherche et je suis tombé sur este page

La commande ne semble pas avoir de sens mais je l'ai quand même essayée :

Dans le fichier /usr/share/phpmyadmin/libraries/dbi/mysqli.dbi.lib.php à la fin de la fonction PMA_DBI_connect() juste avant le return J'ai ajouté une déclaration :

mysqli_query($link, "SET SESSION CHARACTER_SET_RESULTS =latin1;");
mysqli_query($link, "SET SESSION CHARACTER_SET_CLIENT =latin1;");

Et ça marche ! Je vois maintenant des caractères japonais dans phpMyAdmin. WTF ? Pourquoi cela fonctionne-t-il ?

0 votes

Ça a marché pour moi aussi. Tu as trouvé pourquoi ? J'ai vérifié et revérifié tous les éléments possibles (tous les PHP / mb_string, connexions MySQL / Apache / en-têtes html / méta types) sont correctement configurés en UTF-8 et les données sont stockées correctement.

0 votes

Non, je ne suis toujours pas sûr. Je suppose qu'il y a un bug ailleurs dans phpMyAdmin.

1 votes

Dans mon cas, PMA avait raison et l'erreur est due au fait que je n'ai pas configuré explicitement ma connexion à la base de données depuis PHP. Dans mes scripts, j'avais besoin d'une déclaration explicite $mysqli->set_charset('utf8') ; J'ai essentiellement enregistré toutes mes données dans une sorte d'étrange latin1 / utf-8 mush de sorte que si elles sont extraites par mes sites / latin1 shell (en utilisant latin1), il retourne des données utf-8, mais si elle est récupérée à partir de phpMyAdmin (connexion utf-8), il me donne ces petits caractères amusants. Ma solution a été d'extraire les données en utilisant une connexion latin1 et de les mettre à jour en utilisant une connexion utf-8 depuis PHP. C'est peu soigné, mais c'est fonctionnel !

9voto

Dinaga Points 31

J'ai eu le même problème,

Définissez toutes les collations de texte/varchar dans phpMyAdmin à utf-8 et ajoutez ceci dans les fichiers php :

mysql_set_charset("utf8", $your_connection_name) ;

Cela a résolu le problème pour moi.

6 votes

...respectivement $mysqli->set_charset("utf8"); pour MySQLi. ;)

5voto

ajreal Points 31456

La solution à ce problème peut être aussi simple que :

  1. trouver la fonction/méthode de connexion de phpmysqladmin
  2. ajoutez ceci après que la base de données soit connectée $db_conect->set_charset('utf8');

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X