Précédent   Forum des professionnels en informatique > PHP > Outils > phpMyAdmin
phpMyAdmin Forum d'entraide sur l'outil phpMyAdmin : installation, utilisation, etc. Avant de poster -> Cours phpMyAdmin
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
Vieux 24/02/2006, 09h42   #1
Membre du Club
 
Date d'inscription: février 2005
Localisation: Suisse
Âge: 27
Messages: 94
Envoyer un message via MSN à -DeN-
Par défaut UTF-8 et phpMyAdmin : problèmes d'encodage

Suite à ce thread, j'ai décidé de passer à l'utf-8: http://www.developpez.net/forums/viewtopic.php?t=461471
Mais j'ai déjà un problème! Dans ma base de données, il y a des caractères "bizarres" pour les "é" (par exemple) il y a: é

Pourtant:
interclassement: utf8_unicode_ci
Jeu de caractères pour MySQL: UTF-8 Unicode (utf8)
nterclassement pour la connection MySQL UTF-8 Unicode-ci

J'utilise phpMyAdmin, et l'encodage des caractères (firefox) est bien utf-8.

Merci pour votre aide!

EDIT: lorsque dans ma page php je fais un select, cela s'affiche correctement
EDIT2: phpmyadmin 2.6.0pl3
-DeN- est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 24/02/2006, 09h49   #2
Membre habitué
 
Avatar de ..:: Atchoum ::..
 
Date d'inscription: avril 2003
Localisation: Amiens City
Âge: 26
Messages: 162
Envoyer un message via ICQ à ..:: Atchoum ::.. Envoyer un message via MSN à ..:: Atchoum ::.. Envoyer un message via Skype™ à ..:: Atchoum ::..
Par défaut

Salut,

Attention à la configuration de l'affichage de phpMyAdmin. Peut etre bien que tout est en UTF-8 mais que ton phpmyadmin l'affiche en ISO....

__________________
On ne peut empêcher les vagues, mais on peut apprendre à les surfer...
http://blog.plopix.net
http://www.ez-france.org
..:: Atchoum ::.. est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 24/02/2006, 09h54   #3
Membre du Club
 
Date d'inscription: février 2005
Localisation: Suisse
Âge: 27
Messages: 94
Envoyer un message via MSN à -DeN-
Par défaut

et donc je fais comment pour insérer manuellement des données (depuis phpMyAdmin). Car en effet, si j'insère "é", le select de ma page php affiche un losange noir avec un "?" à l'intérieur.

Est-ce un fichier de config à modifier?

Merci pour cette aide au passage à utf-8
-DeN- est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 24/02/2006, 09h55   #4
Expert Confirmé Sénior
 
Avatar de Mr N.
 
Date d'inscription: septembre 2004
Messages: 5 463
Par défaut

Et ton flux html ?
Mr N. est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 24/02/2006, 09h59   #5
Membre du Club
 
Date d'inscription: février 2005
Localisation: Suisse
Âge: 27
Messages: 94
Envoyer un message via MSN à -DeN-
Par défaut

Citation:
Envoyé par Mr N.
Et ton flux html ?
hem, tu veux parler de quoi :
Si c'est de l'option affichage->encodage des caractères (sous firefox) c'est bien en utf-8.

Et sinon j'ai bien mis le <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-DeN- est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 24/02/2006, 10h40   #6
Membre du Club
 
Date d'inscription: février 2005
Localisation: Suisse
Âge: 27
Messages: 94
Envoyer un message via MSN à -DeN-
Par défaut

Les caractères que j'appelais "bizarres" sont en fait les correspondants iso-8859-1 de l'utf-8.
phpMyAdmin ne veut pas me les afficher en utf-8! (et donc je ne peux pas insérer non plus via phpmyadmin)!
-DeN- est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 24/02/2006, 15h28   #7
Membre du Club
 
Date d'inscription: février 2005
Localisation: Suisse
Âge: 27
Messages: 94
Envoyer un message via MSN à -DeN-
Par défaut

mmh, je trouve pas Malgré mes recherches sur le net, j'ai vu un type qui avait le même problème mais aucune réponse
-DeN- est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 24/02/2006, 16h03   #8
Membre habitué
 
Date d'inscription: août 2005
Localisation: Berlin
Messages: 142
Par défaut

regarde la source html de phpMyAdmin via Firefox et regarde si ya la bonne <meta> utf-8

sinon essaye un .htaccess avec AddDefaultCharset UTF-8 dans le repertoire de phpMyAdmin pour voir se que sa donne
zulkifli est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 24/02/2006, 16h24   #9
Membre du Club
 
Date d'inscription: février 2005
Localisation: Suisse
Âge: 27
Messages: 94
Envoyer un message via MSN à -DeN-
Par défaut

1) C'est bien en utf-8
2) rien ne change

Merci pour ces propositions, mais je ne comprend pas du tout pourquoi phpmyadmin affiche cela. Est-ce que mes données ne sont pas VRIAMENT en utf-8?
-DeN- est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 24/02/2006, 16h51   #10
Membre habitué
 
Date d'inscription: août 2005
Localisation: Berlin
Messages: 142
Par défaut

As tu bien reseigné l'interclassement UTF-8 de ta base de donnée, de tes tables et de leur champs?
zulkifli est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 24/02/2006, 16h56   #11
Membre du Club
 
Date d'inscription: février 2005
Localisation: Suisse
Âge: 27
Messages: 94
Envoyer un message via MSN à -DeN-
Par défaut

question: faut-il changer qqch quand on passe en utf-8 dans php.ini ou dans le fichier de config de phpmyadmin?
-DeN- est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 02/03/2006, 11h41   #12
Membre du Club
 
Date d'inscription: février 2005
Localisation: Suisse
Âge: 27
Messages: 94
Envoyer un message via MSN à -DeN-
Par défaut

Désolé de remonter le sujet, mais je ne trouve pas de réponse.

Config:
- php5.04
- mysql 4.1.12
- phpMyAdmin 2.6.0-pl3
phpmyadmin:
- Language: Fr-UTF-8
- Jeu de caractères pour MySQL: UTF-8 Unicode (utf8)
- Interclassement pour la connection MySQL: UTF8_general_ci
- Interclassement de la BD: utf8_general_ci

Lorsque je me connecte je fais bien une query genre "set names utf-8", et en me connectant hors phpmyadmin j'ai pu bien voir que les caractères sont bien en utf8. (en lignes de commandes il s'affiche aussi é pour un "é")

Le problème: sous phpMyAdmin les caractères sont affichés comme si c'était de l'iso => les é deviennent é (donc on ne peut pas insérer non plus: dans ce cas il s'insère un "é" => dans ma page php j'ai un losange noir avec un "?")

Détails: mb_string n'est pas installé, aucun fichier de config modifié, le charset est utf-8 dans les <meta> myadmin. Pas de reboot.

Si qqn a la moindre idée, cela m'aiderait bcp!!! Merci!
-DeN- est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 04/07/2006, 18h32   #13
Membre Confirmé
 
Date d'inscription: juillet 2004
Localisation: Mieszkam w Grenoblu
Messages: 267
Par défaut

J'ai exactement le même problème que toi.
As-tu trouvé une solution?
__________________
Хајде Јано коло да играмо
SuperCed est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 20/07/2006, 18h30   #14
Membre extrêmement actif(ve)
 
Avatar de lodan
 
Date d'inscription: juin 2006
Messages: 1 662
Par défaut utf-8 suite

Je traine cette galère depuis un bon moment et de temps en temps je cherche la solution sur le net.

Cela semble venir de nul part et pourtant nous sommes nombreux dans ce cas.

Il est clair pour moi que je ne dois pas toucher aux paramètres par défaut de Firefox, puisque l'utilisateur visitant un site ne doit modifier ses paramètres.

Il y a sur firefox dans "Affichage" "Encodage des caractères" "Détection automatique" (Désactivé).

Celui là j'aimerai bien l'activer pour voir, mais je ne trouve pas comment.

J'utilise Golive CS2 pour créer mes pages, elles doivent être en encodage utf-8 ?

Ma base mysql sous phpmyadmin est en utf-8 idem pour les tables et les champs.

Je ne vois rien d'autre
lodan est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 01/08/2006, 12h48   #15
Membre Confirmé
 
Date d'inscription: juillet 2004
Localisation: Mieszkam w Grenoblu
Messages: 267
Par défaut

Ok, c'est bon, j'ai la solution.

J'ai ajouté 2 lignes dans les fichiers dbi contenus dans le répertoire librairies/dbi/

Voici les lignes pour chaque fichier :
dans mysql.dbi.lib.php
Code :
 
mysql_query("SET SESSION CHARACTER_SET_RESULTS =latin1;",$link);
    mysql_query("SET SESSION CHARACTER_SET_CLIENT =latin1;",$link);
 
Après PMA_DBI_postConnect($link, $is_controluser);
et avant return $link;
Dans la fonction PMA_DBI_connect

Au même endroit, dans le fichier mysqli.dbi.lib.php :
Code :
 
mysqli_query($link, "SET SESSION CHARACTER_SET_RESULTS =latin1;");
mysqli_query($link, "SET SESSION CHARACTER_SET_CLIENT =latin1;");
 
Il s'agit en fait d'éviter au client mysql de faire une double conversion vers l'utf-8.

Voici le code complet des deux pages maintenant pour la fonction à modifier :
Code :
 
function PMA_DBI_connect($user, $password, $is_controluser = FALSE) {
    global $cfg, $php_errormsg;
 
    $server_port   = (empty($cfg['Server']['port']))
                   ? ''
                   : ':' . $cfg['Server']['port'];
 
    if (strtolower($cfg['Server']['connect_type']) == 'tcp') {
        $cfg['Server']['socket'] = '';
    }
 
    $server_socket = (empty($cfg['Server']['socket']))
                   ? ''
                   : ':' . $cfg['Server']['socket'];
 
    if (PMA_PHP_INT_VERSION >= 40300 && PMA_MYSQL_CLIENT_API >= 32349) {
        $client_flags = $cfg['Server']['compress'] && defined('MYSQL_CLIENT_COMPRESS') ? MYSQL_CLIENT_COMPRESS : 0;
        // always use CLIENT_LOCAL_FILES as defined in mysql_com.h
        // for the case where the client library was not compiled
        // with --enable-local-infile
        $client_flags |= 128;
    }
 
    if (empty($client_flags)) {
        $connect_func = 'mysql_' . ($cfg['PersistentConnections'] ? 'p' : '') . 'connect';
        $link = @$connect_func($cfg['Server']['host'] . $server_port . $server_socket, $user, $password);
    } else {
        if ($cfg['PersistentConnections']) {
            $link = @mysql_pconnect($cfg['Server']['host'] . $server_port . $server_socket, $user, $password, $client_flags);
        } else {
            $link = @mysql_connect($cfg['Server']['host'] . $server_port . $server_socket, $user, $password, FALSE, $client_flags);
        }
    }
 
    if (empty($link)) {
        PMA_auth_fails();
    } // end if
 
    PMA_DBI_postConnect($link, $is_controluser);
    
    mysql_query("SET SESSION CHARACTER_SET_RESULTS =latin1;",$link);
    mysql_query("SET SESSION CHARACTER_SET_CLIENT =latin1;",$link);
    return $link;
}
 
et

Code :
 
function PMA_DBI_connect($user, $password, $is_controluser = FALSE)
{
    global $cfg, $php_errormsg;
 
    $server_port   = (empty($cfg['Server']['port']))
                   ? FALSE
                   : (int) $cfg['Server']['port'];
 
    if (strtolower($cfg['Server']['connect_type']) == 'tcp') {
        $cfg['Server']['socket'] = '';
    }
 
    // NULL enables connection to the default socket
    $server_socket = (empty($cfg['Server']['socket']))
                   ? null
                   : $cfg['Server']['socket'];
 
    $link = mysqli_init();
 
    mysqli_options($link, MYSQLI_OPT_LOCAL_INFILE, TRUE);
 
    $client_flags = $cfg['Server']['compress'] && defined('MYSQLI_CLIENT_COMPRESS') ? MYSQLI_CLIENT_COMPRESS : 0;
 
    $return_value = @mysqli_real_connect($link, $cfg['Server']['host'], $user, $password, FALSE, $server_port, $server_socket, $client_flags);
 
    if ($return_value == FALSE) {
        PMA_auth_fails();
    } // end if
 
    PMA_DBI_postConnect($link, $is_controluser);
    mysqli_query($link, "SET SESSION CHARACTER_SET_RESULTS =latin1;");
    mysqli_query($link, "SET SESSION CHARACTER_SET_CLIENT =latin1;");
    return $link;
}
 
__________________
Хајде Јано коло да играмо
SuperCed est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 08/10/2007, 23h37   #16
Invité de passage
 
Date d'inscription: octobre 2007
Messages: 3
Par défaut

Etant donné qu'on trouve cette solution en cherchant un peu, je préfère préciser ici que ce n'est pas du tout ce qu'il faut faire.

Pour se connecter à une base en utf-8 sur mysql en utilisant PHP, il faut préciser après le mysql_connect :
Code :
mysql_query("SET NAMES 'UTF8'")
Dans de nombreux frameworks PHP, il est possible de configurer sa connection à la base. Avec cakephp par exemple, il faut ajouter dans la configuration de base de données :

Code :
'encoding' => 'utf8'
Ainsi, les données affichées par phpmyadmin et les requêtes PHP seront les mêmes.
Xargos est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 26/09/2008, 09h37   #17
Invité régulier
 
Date d'inscription: décembre 2007
Messages: 18
Par défaut

Citation:
Envoyé par Xargos Voir le message
Etant donné qu'on trouve cette solution en cherchant un peu, je préfère préciser ici que ce n'est pas du tout ce qu'il faut faire.

Pour se connecter à une base en utf-8 sur mysql en utilisant PHP, il faut préciser après le mysql_connect :
Code :
mysql_query("SET NAMES 'UTF8'")
J'ai déjà ça en place.
Même mon SET NAMES est redondant par rapport à la config de MySql. Le problème reste le même :
- tout en utf8 dans les pages accès, enregistrement, modification via php
- tout en utf8 dans Mysql
Aucun pb

Dès qu'on affiche dans PMA, ça ressemble à de l'iso affiché en utf8

la solution énoncée dans le post précédent le tien ne me paraît pas "super" parce que ça demande de patcher, mais elle a le mérite de résoudre le souci.
Même si je pense fortement que le souci est en amont avec un truc oublié dans un coin :\

Nico

Dernière modification par nicolas.poulain ; 26/09/2008 à 09h47.
nicolas.poulain est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 26/09/2008, 21h35   #18
Invité régulier
 
Date d'inscription: décembre 2007
Messages: 18
Par défaut Résolu : Ok pour moi

Bonjour

Pour moi résolu avec :
mysql_query("SET NAMES 'utf8'") ;

Je l'avais mis après le return de ma fonction de connexion à la base
Les plus gros problèmes sont entre la chaise et le clavier... m'en bat la culpe ici publiquement :\

Du coup, ça fonctionne bien quelque soit le mode de connexion à la base : PMA, mon appli, en console directos via mysql

Glané dans les recherches :
http://wiki.cihar.com/pma/garbled_data
et
http://fr.php.net/manual/fr/function...et-charset.php

Nico
nicolas.poulain est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 02/12/2008, 14h16   #19
Nouveau membre du Club
 
Date d'inscription: septembre 2008
Messages: 79
Par défaut Utf-8 carractere arabe

Citation:
Envoyé par SuperCed Voir le message
Ok, c'est bon, j'ai la solution.

J'ai ajouté 2 lignes dans les fichiers dbi contenus dans le répertoire librairies/dbi/

Voici les lignes pour chaque fichier :
dans mysql.dbi.lib.php
Code :
 
mysql_query("SET SESSION CHARACTER_SET_RESULTS =latin1;",$link);
    mysql_query("SET SESSION CHARACTER_SET_CLIENT =latin1;",$link);
 
Après PMA_DBI_postConnect($link, $is_controluser);
et avant return $link;
Dans la fonction PMA_DBI_connect

Au même endroit, dans le fichier mysqli.dbi.lib.php :
Code :
 
mysqli_query($link, "SET SESSION CHARACTER_SET_RESULTS =latin1;");
mysqli_query($link, "SET SESSION CHARACTER_SET_CLIENT =latin1;");
 
Il s'agit en fait d'éviter au client mysql de faire une double conversion vers l'utf-8.

Voici le code complet des deux pages maintenant pour la fonction à modifier :
Code :
 
function PMA_DBI_connect($user, $password, $is_controluser = FALSE) {
    global $cfg, $php_errormsg;
 
    $server_port   = (empty($cfg['Server']['port']))
                   ? ''
                   : ':' . $cfg['Server']['port'];
 
    if (strtolower($cfg['Server']['connect_type']) == 'tcp') {
        $cfg['Server']['socket'] = '';
    }
 
    $server_socket = (empty($cfg['Server']['socket']))
                   ? ''
                   : ':' . $cfg['Server']['socket'];
 
    if (PMA_PHP_INT_VERSION >= 40300 && PMA_MYSQL_CLIENT_API >= 32349) {
        $client_flags = $cfg['Server']['compress'] && defined('MYSQL_CLIENT_COMPRESS') ? MYSQL_CLIENT_COMPRESS : 0;
        // always use CLIENT_LOCAL_FILES as defined in mysql_com.h
        // for the case where the client library was not compiled
        // with --enable-local-infile
        $client_flags |= 128;
    }
 
    if (empty($client_flags)) {
        $connect_func = 'mysql_' . ($cfg['PersistentConnections'] ? 'p' : '') . 'connect';
        $link = @$connect_func($cfg['Server']['host'] . $server_port . $server_socket, $user, $password);
    } else {
        if ($cfg['PersistentConnections']) {
            $link = @mysql_pconnect($cfg['Server']['host'] . $server_port . $server_socket, $user, $password, $client_flags);
        } else {
            $link = @mysql_connect($cfg['Server']['host'] . $server_port . $server_socket, $user, $password, FALSE, $client_flags);
        }
    }
 
    if (empty($link)) {
        PMA_auth_fails();
    } // end if
 
    PMA_DBI_postConnect($link, $is_controluser);
    
    mysql_query("SET SESSION CHARACTER_SET_RESULTS =latin1;",$link);
    mysql_query("SET SESSION CHARACTER_SET_CLIENT =latin1;",$link);
    return $link;
}
 
et

Code :
 
function PMA_DBI_connect($user, $password, $is_controluser = FALSE)
{
    global $cfg, $php_errormsg;
 
    $server_port   = (empty($cfg['Server']['port']))
                   ? FALSE
                   : (int) $cfg['Server']['port'];
 
    if (strtolower($cfg['Server']['connect_type']) == 'tcp') {
        $cfg['Server']['socket'] = '';
    }
 
    // NULL enables connection to the default socket
    $server_socket = (empty($cfg['Server']['socket']))
                   ? null
                   : $cfg['Server']['socket'];
 
    $link = mysqli_init();
 
    mysqli_options($link, MYSQLI_OPT_LOCAL_INFILE, TRUE);
 
    $client_flags = $cfg['Server']['compress'] && defined('MYSQLI_CLIENT_COMPRESS') ? MYSQLI_CLIENT_COMPRESS : 0;
 
    $return_value = @mysqli_real_connect($link, $cfg['Server']['host'], $user, $password, FALSE, $server_port, $server_socket, $client_flags);
 
    if ($return_value == FALSE) {
        PMA_auth_fails();
    } // end if
 
    PMA_DBI_postConnect($link, $is_controluser);
    mysqli_query($link, "SET SESSION CHARACTER_SET_RESULTS =latin1;");
    mysqli_query($link, "SET SESSION CHARACTER_SET_CLIENT =latin1;");
    return $link;
}
 
Bonjour
j'ai le meme probleme mais avec les carracteres arabes.
quand jesaisiun nom arabe il m'affiche l'erreur suivante"data too long for nom" nom c'est le nom du chap
SVP aidez moi
Amel_B est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 02/12/2008, 15h55   #20
Membre Confirmé
 
Date d'inscription: juillet 2004
Localisation: Mieszkam w Grenoblu
Messages: 267
Par défaut

Citation:
Envoyé par Amel_B Voir le message
Bonjour
j'ai le meme probleme mais avec les carracteres arabes.
quand jesaisiun nom arabe il m'affiche l'erreur suivante"data too long for nom" nom c'est le nom du chap
SVP aidez moi
Il s'agit peut être de changer latin 1 par le nom de l'encodage utilisé pour afficher des caractères arabes.

Il faut aussi faire attention, je pense que les caractères arabes peuvent être sur 4 octets. Il faut donc bien faire des tests multioctets quand on teste la longueur des châines.
__________________
Хајде Јано коло да играмо
SuperCed est déconnecté   Envoyer un message privé Réponse avec citation
NEWS PHPFAQ PHPCours PHPSources PHPLivres PHPScripts PHPOutils PHPComparatifsZend Framework

Réponse Proposer ce sujet en actualité

Précédent   Forum des professionnels en informatique > PHP > Outils > phpMyAdmin



Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are non
Pingbacks are non
Refbacks are non



Fuseau horaire GMT +1. Il est actuellement 19h27.


Vos questions techniques : forum d'entraide PHP - Publiez vos articles, tutoriels et cours
et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones
Nous contacter - Hébergement - Participez - Copyright © 2000-2010 www.developpez.com - Legal informations.