Comment ajouter un texte en UTF8 dans PhpMyAd

Résolu/Fermé
webaide Messages postés 97 Date d'inscription jeudi 12 novembre 2009 Statut Membre Dernière intervention 27 janvier 2012 - 12 nov. 2009 à 22:33
webaide Messages postés 97 Date d'inscription jeudi 12 novembre 2009 Statut Membre Dernière intervention 27 janvier 2012 - 17 nov. 2009 à 16:15
Bonjour,

j'aimerais ajouter du texte dans ma base de données, directement par phpMyAdmin, car je n'ai pas besoin de faire une interface car utilisé ces données ne sont pas à modifier.

Hors ces données, sont affiché dans une page en UTF8, et du coup j ai des erreures d'affichage, la table est bien en UTF8 comme les champs, quand j'utilise une interface depuis le site et que je rentre des données aucun soucis, mais la on dirait que phpMyAdmin les prend pour de l'ISO.

peut t'on configurer l'interface phpMyAdmin en UTF8 ?

peut t'on convertir le texte en UTF8 ?

merci pour votre aide.
A voir également:

9 réponses

Si, tu as besoin du SET NAMES

Le SET NAMES ne concerne pas le codage des tables, il concerne le codage utilisé pour le dialogue entre ton script et mysql. Il faut bien comprendre cette distinction pour comprendre le problème.
Le SET NAMES UTF8 signifie que les données que tu envoies à mysql sont codées en utf8, et que quand tu l'interroges, tu veux des résultats en utf8. Que les tables soient en iso ou en utf8 est une autre question : mysql fait les traductions si nécessaire (et dans la mesure du possible, car il n'y a pas de correspondance directe entre les deux encodages)

Sans ce SET NAMES, mysql croit que tu lui envoies les infos en iso. Si tu lui envoies un é en iso (code E9) dans une table iso, il va y écrire E9. Si c'est une table utf-8, il va traduire ce E9 en utf8 -> C3 A9. Quand tu reliras avec ton script, il fera la traduction inverse et tout baigne encore.
Toujours sans cet SET NAMES, si tu écris un é déjà codé en utf8, c'est à dire C3 A9, vers une table utf8, mysql croit toujours que tu lui parles en iso. Il va donc traduire le C3 et utf8 -> C3 83 puis le A9 -> C2 A9. Quand tu le reliras, il fera la traduction inverse et tu auras l'impression que ça baigne. Mais phpmyadmin lui, te montrera é car c'est bien comme ça que s'interprète C3 83 C2 A9 en utf8.

Avec le SET NAMES UTF8 , mysql n'a besoin de faire aucune traduction pour lire ou écrire dans une table utf8. D'où économie de ressources d'une part (les traductions sont coûteuses) et cohérence garantie entre ton script (en utf8 lui aussi), mysql et phpmyadmin.
1
webaide Messages postés 97 Date d'inscription jeudi 12 novembre 2009 Statut Membre Dernière intervention 27 janvier 2012 63
17 nov. 2009 à 16:15
J'ai trouvé, il ne faut pas mettre le SET NAMES dans ce cas la, tout fonctionen bien, puisque en console sous linux, on à bien de l'UTF8, cela viens exclusivement de phpmyadmin.

la solution se trouve ici :
https://www.developpez.net/forums/d105647/php/edi-cms-outils-scripts-api/utf-8-phpmyadmin-problemes-d-encodage/#post1222765

il faut rajouter deux lignes dans les fichiers de connexions de phpmyadmin à mysql juste àprés cette ligne :

PMA_DBI_postConnect($link, $is_controluser);

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

tout fonctionne correctement.

1
Bonjour

Si tu as bien défini tes tables et tes champs en UTF8, tu ne devrais pas avoir de problèmes avec phpmyadmin
As-tu bien dans ton script une requête SET NAMES 'UTF8' après la sélection de ta base ?
Si tu as commencé à entrer des données sans cette requête, tu vas être déçu : ce sont tes anciennes données qui vont maintenant mal s'afficher. Car mysql considère a priori qu'on lui envoie des données en ISO ; il les traduit en utf-8 pour les enregistrer dans une table utf-8 et les décode pour te les restituer. Tu as donc l'impression qu'elles sont bien enregistrées en utf8, alors qu'en fait elles sont "codées deux fois".
Comme phpmyadmin ne fait pas cette erreur, quand tu lis les données enregistrées avec phpmyadmin dans un script qui n'a pas SET NAMES 'UTF8', elles sont re-traduites en ISO. Mais le problème ne vient pas de mysql ni de phpmyadmin mais bien de ton script.
Personnellement j'ai mis longtemps à comprendre ça, les explication dans la doc mysql ne me semblent pas limpides. Et je ne suis même pas sûr d'avoir tout compris :)
0
webaide Messages postés 97 Date d'inscription jeudi 12 novembre 2009 Statut Membre Dernière intervention 27 janvier 2012 63
13 nov. 2009 à 10:38
Mon site est en UTF8
( header utf8 )
l'encodage de la page en utf8
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

et une verifiaction sur W3 me donne bien du UTF8, de plus je suis sous linux, travail sous eclipse configuré en UTF8.

j'ai une interface d'administration, si j'enregistre des données, elles sont bien enregitrées en UTF8 dans la base MySQL

si je vais dans phpMyAdmin il m'affiche Ferré ce qui est typique de données UTF8 qui sont affiché en ISO

Jusque la tout fonctionne parfaitement.

par contre, si je veux rentrer des données avec PHPMyAdmin et que je les affiche ensuite sur le site, j('ai ca :
� qui est typique de données enregistré au format iso et affiché sur une page UTF8

Si je rajoute SET NAMES UTF8 je n'ai plus de probleme,


mais du coup je me demande, dans quel formats sont enegitré mes données ??? Normalement ma base et ma table etant en UTF8 je n'ai pas besoin d'utiliser SET NAMES ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
webaide Messages postés 97 Date d'inscription jeudi 12 novembre 2009 Statut Membre Dernière intervention 27 janvier 2012 63
13 nov. 2009 à 11:53
et on ne peut pas se passer du set names en définissant que c est le langage par défaut ?

0
Ça doit bien pouvoir se configurer quelque part au niveau de mysql, j'avoue que je n'ai pas cherché. Surtout que mes sites sont en hébergement mutualisé et que je ne peux donc pas toucher à ce genre de paramètre.
Mais ajouter ce SET NAMES dans la fonction de sélection de la base de données ne représente quand même pas un gros effort ...
0
webaide Messages postés 97 Date d'inscription jeudi 12 novembre 2009 Statut Membre Dernière intervention 27 janvier 2012 63
13 nov. 2009 à 12:13
non, ce n'est pas un gros effort, je le rajoute âpres ma connection, mais j'aime bien comprendre.

en tout cas, un grand merci pour tes explications.
0
webaide Messages postés 97 Date d'inscription jeudi 12 novembre 2009 Statut Membre Dernière intervention 27 janvier 2012 63
17 nov. 2009 à 14:21
J'ai toujours un probleme.

Ma base est bien en utf8_unicode_ci ( ALTER DATABASE `table` DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_unicode_ci; )

Sans "SET NAMES"
Je fais un update de la table ( ou insert) avec des données, et la dans PHP MyAdmin, les données sont mal affichées.

si je fais un echo de ma variable dans l update ok
si j'affiche ce que j ai dans phpmyadmin c est pas bon
si je fais un select et que je fais un echo c est bon

Théâtre -> Théâtre -> Théâtre

si j'ajoute des données dans phpmyadmin elles s'affichent bien, mais pas sur le site
Privée -> Priv�e

Avec "SET NAMES"

pour un enregistrement en base, mon resultat s'affiche mal
Théâtre -> Théâtre -> Théâtre

mais les données rentrées dans phpmyadmin s'affichent bien :
Privée -> Privée

J'ai l'impression que c'est phpmyadmin qui interprete mal les données ?

qu'en pensez vous ?
0
webaide Messages postés 97 Date d'inscription jeudi 12 novembre 2009 Statut Membre Dernière intervention 27 janvier 2012 63
17 nov. 2009 à 15:58
autre chose, si je fais un select depuis mon shell linux ( donc en UTF8 ) j ai bien Théâtre donc ca veut dire que mes données dans la base sont bien en UTF8 ?

et pour les données rentrées dans phpMyAdmin : Vente Priv�e donc iso affiché en UTF8 ?

0