Bonjour à tous,

Soit une base de donnée vide en utf8. J'ai un fichier .sql (encodé en utf8) destiné à remplir la base de données. Lorsque je demande à phpmyadmin d'importer le fichier, je renseigne le champ "fichier codé en utf8" ; finalement à travers l'interface de phpmyadmin j'affiche le contenu de mes tables et je ne rencontre aucun problème d'accent.

Soit mon site codé en utf8 avec la balise meta utf8 qui va bien.

Pour résumer tout est en utf8. Mais voilà, lorsque je demande au site d'afficher le contenu de ma bd, j'ai les petits points d'interrogations "enlosangés" qui me signalent que la source que le site affiche est en iso8859. Je n'ai pas fait le test, mais je pense que si je déclarais ma page en iso8859-1, elle afficherait correctement ce qui vient de la bd, et poserait problème au reste de la pge

Je décide alors de faire un nouveau test et je demande à phpmyadmin d'importer le même fichier .sql en considérant que c'est du latin1. Dans phpmyadmin, l'affichage de mes tables donnent alors les fameux A accentué qui signifient que le fichier a été considéré comme du iso8859 alors que c'était du utf8, comportement normal. Puis je lance mon site et cette fois tout est affiché normalement.

Ça me laisse perplexe et j'aimerais vraiment m'expliquer ce qu'il se passe. Je ne comprends pas quel maillon pose problème. Pour info j'inclus des fichiers dans mes pages qui sont eux aussi en utf8.

Merci d'avance pour vos lumières Smiley smile
Modifié par Maelikk (07 Aug 2008 - 15:29)
Maelikk a écrit :
Soit mon site codé en utf8 avec la balise meta utf8 qui va bien.

Et quel en-tête HTTP envoyé par le serveur?

Maelikk a écrit :
Je n'ai pas fait le test, mais je pense que si je déclarais ma page en iso8859-1, elle afficherait correctement ce qui vient de la bd, et poserait problème au reste de la pge

Tu peux faire ce test en 3 secondes chrono avec un navigateur. Avec Firefox: Affichage > Encodage des caractères > ...

Maelikk a écrit :
Dans phpmyadmin, l'affichage de mes tables (...)

Quel est l'encodage déclaré par PhpMyAdmin (balise META et en-tête HTTP)?
La barre d'outils Webdeveloper pour Firefox permet de récupérer les en-têtes HTTP envoyés pour une page donnée, en faisant «Information > En-têtes HTTP (Réponses)».

Felipe a écrit :
as-tu tenté d'utiliser SET NAMES 'utf8'; quand tu te connectes à ta base?

Il me semble que SET NAMES ne devrait être utilisé, pour récupérer des informations, que si on veut que MySQL fasse une conversion automatique avant d'envoyer les données, non?
C'est à dire que si l'info à récupérer est déjà marquée comme UTF-8, pas de conversion.
Et si l'info à récupérer est marquée comme étant dans un autre encodage, conversion vers UTF-8 par MySQL avant l'envoi des données.

Une autre remarque pour Maelikk: ta base de données vide est en UTF-8. Mais est-ce que les commandes dans ton fichier .sql ne créent pas des tables ou des colonnes en ISO-8859-1 ou autre encodage?
Parce que MySQL gère les encodages à divers niveaux.
À tout hasard, vérifie ton fichier .sql. Smiley cligne
Bonjour,

Merci pour vos réponses ! J'ai bien pris connaissance de vos commentaires, mais je n'ai pas encore eu le temps de m'y remettre. Je vous tiendrai au courant dés que j'aurais un peu de temps !

Ce problème me taraude, et j'aimerais bien comprendre le pourquoi du comment Smiley smile
Bonjour,

Je prends enfin le temps de me consacrer à ce problème qui n'a que trop longtemps durer. Mon bidouillage me dépanne bien, mais ça n'est pas une fin en soit. Concernant les informations que tu m'as demandées Florent :

En-tête HTTP envoyé par le serveur :

Date: Thu, 07 Aug 2008 09:37:51 GMT
Server: Apache/2.2.8 (Ubuntu) PHP/5.2.4-2ubuntu5.3 with Suhosin-Patch
X-Powered-By: PHP/5.2.4-2ubuntu5.3
Content-Length: 3385
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Content-Type: text/html

200 OK


Balise META de la page PhpMyAdmin :

    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />


En-tête HTTP PhpMyAdmin :

Date: Thu, 07 Aug 2008 09:43:00 GMT
Server: Apache/2.2.8 (Ubuntu) PHP/5.2.4-2ubuntu5.3 with Suhosin-Patch
X-Powered-By: PHP/5.2.4-2ubuntu5.3
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: private, max-age=10800, pre-check=10800
Last-Modified: Sat, 08 Dec 2007 12:47:13 GMT
Set-Cookie: pma_fontsize=deleted; expires=Wed, 08-Aug-2007 09:42:59 GMT; path=/phpmyadmin/
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/html; charset=utf-8

200 OK


Concernant les fichiers SQL, j'importe des fichiers CSV, je les édite avec VIM, la commande
:set fileencoding
me renvoie UTF8

Toutes mes excuses pour le délai de réponse, j'espère qu'il y a dans mes manip' matière à réflexion. Par avance merci Smiley smile
Florent V. a écrit :
Il me semble que SET NAMES ne devrait être utilisé, pour récupérer des informations, que si on veut que MySQL fasse une conversion automatique avant d'envoyer les données, non?

En fait non. Smiley langue
Si tu as des données en UTF-8 dans ta base MySQL, et que tu veux les récupérer en UTF-8, ma connexion avec le serveur MySQL doit se faire en UTF-8. Deux solutions:
- soit tu configures le serveur pour qu'il utilise une connexion par défaut en UTF-8;
- soit tu utilises SET NAMES utf8 comme première requête SQL.

Si tu demandes des données que MySQL reconnait comme étant de l'UTF-8, et laisse la connexion en ISO-8859-1 (par défaut la plupart du temps), MySQL convertira les données de UTF-8 à ISO-8859-1 à la volée. D'où ton problème, je suppose.
Bonjour Florent, merci de te pencher à nouveau sur mon problème !

Suite à un message trouvé sur un autre post, j'ai modifié l'interclassement de PhpMyAdmin ainsi que toutes les références à utf8, anciennement à utf8_unicode_ci, par utf8_general_ci. Ça semble fonctionner aléatoirement, sans doute un problème de cache divers, il me remet sans trop savoir pourquoi des ? enlosangés suite à un redémarrage de Firefox, ou bien à un rafraîchissement ctrl-F5. Je mets ma machine quelques jours en observation voir comment ça va évoluer Smiley smile

Je te renouvelle mes remerciements !

edit : avec ma méthode c'est trop aléatoire, en mettant SET NAMES utf8 ça marche à tous les coups. Si quelqu'un se sent de m'expliquer, je suis toujours autant largué par ce souci Smiley smile
Modifié par Maelikk (07 Aug 2008 - 15:42)