Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
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 25/03/2011, 18h21   #1
Invité de passage
 
Inscription : mars 2007
Messages : 25
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 25
Points : 2
Points : 2
Par défaut Encodage SESSION / GLOBALE

Bonjour, je déterre ce vieux topic car je "sèche" sur un problème complémentaire.

En fait le my.cnf précise bien le bon charset (latin1).
Mais sans effectuer de SET_NAMES latin1, ça ne fonctionne toujours pas.

En fait le problème vient des variables de SESSION, mais je ne sais pas comment elles sont déterminées:

Citation:
SHOW SESSION VARIABLES like "char%";
SHOW GLOBAL VARIABLES like "char%";
Voilà ce que j'ai comme différences avec ces commandes
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
    [character_set_client] => Array
        (
            [SESSION] => utf8
            [GLOBAL] => latin1
        )

    [character_set_connection] => Array
        (
            [SESSION] => utf8
            [GLOBAL] => latin1
        )

    [character_set_results] => Array
        (
            [SESSION] => utf8
            [GLOBAL] => latin1
        )

    [collation_connection] => Array
        (
            [SESSION] => utf8_general_ci
            [GLOBAL] => latin1_swedish_ci
        )
Seulement voilà... impossible de trouver un quelconque "fichier de config" pour la session. Est-ce lié à la config de MySQL? PHP? Apache?...

Merci d'avance pour ceux qui ont des infos sur le sujet.

NB: pour info en cherchant, j'ai découvert la fonction PHP mysql_client_encoding() qui retourne utf8... mais ça ne m'avance pas plus.
cccm62 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/03/2011, 18h58   #2
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
c'est tas connexion qui est comme ca, y'a un mysql_set_charset (ou autre) dans le coin ?
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/03/2011, 20h26   #3
Invité de passage
 
Inscription : mars 2007
Messages : 25
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 25
Points : 2
Points : 2
Bonsoir,

Citation:
y'a un mysql_set_charset (ou autre) dans le coin ?
Non, pour mysql_set_charset, cette fonction n'est dispo que depuis 5.2.3 et les sites tournent avec la version 5.2.2 (j'aurais dû le préciser désolé).

Je fais les tests sur un virtualhost créé pour ça... donc vierge de tout code. Il n'y a rien dans le .htaccess, et dans la page j'ouvre directement la connexion.

Je ne sais pas si ça peut avoir un lien, mais d'après le phphinfo, je suis en mode CGI/FastCGI

Code :
1
2
3
4
5
6
7
8
// SESSION
character_set_client => utf8
character_set_connection => utf8
character_set_database => latin1
character_set_results => utf8
character_set_server => latin1
character_set_system => utf8
character_sets_dir => /usr/share/mysql/charsets/
Code :
1
2
3
4
5
6
7
8
// GLOBAL
character_set_client => latin1
character_set_connection => latin1
character_set_database => latin1
character_set_results => latin1
character_set_server => latin1
character_set_system => utf8
character_sets_dir => /usr/share/mysql/charsets/

Pour l'histoire il s'agit d'un serveur en local, assez vieux, et il y a toujours eu ce problème depuis que je suis arrivé. => pour les sites récents on utilise SET NAME, mais il y a beaucoup d'anciens sites (en latin1) avec des pb d'encodage (puisque charset SESSION en utf8). Pas très grave puisque c'est en local mais je me dis qu'il il doit bien y avoir une solution de ne pas écraser la conf. globale... (!)
cccm62 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/03/2011, 20h47   #4
Invité de passage
 
Inscription : mars 2007
Messages : 25
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 25
Points : 2
Points : 2
J'ai essayé un AddHandler application/x-httpd-php dans un htaccess, il passe bien en Apache 2.0 Handler (PHP 4.4.8) mais toujours les mêmes infos de connexion.

[Edit] Voilà ce qu'on peut lire dans la doc php.net de la fonction mysql-client-encoding...

Citation:
Unfortuantely the PHP mysql_connect() function does not use MySQL options files so this is not a sollution for changing the default connection character set for mysqlclient library v4.1+.

The only working sollution remains:

mysql_query("SET NAMES utf8", $conn);

(of course /ext/mysql/php_mysql.c can always be patched ;] )
ca me paraît bizarre... ça voudrait dire qu'il n'y a pas de solution "globale" en passant par un fichier de config? Qu'il faudrait recompiler PHP ?
cccm62 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/03/2011, 21h07   #5
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
mysql_* est une veilel extension, mais mysqli le fait

mais c'est pas par défaut puisque en cas de connexion distant ça ne marcherait pas,
de tout facon tu doit toujours utilise le SET NAMES ou mysql_set_charset (ou autre avec mysqli, PDO)
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/03/2011, 14h15   #6
Invité de passage
 
Inscription : mars 2007
Messages : 25
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 25
Points : 2
Points : 2
J'ai trouvé d'où venait le problème,

Il faut ajouter dans my.cnf:

Code :
1
2
[mysqld]
init-connect = 'SET NAMES latin1'
et créer un utilisateur spécifique avec des droits restreints (ne fonctionne pas avec root)

=> la connexion se fait bien en latin1
cccm62 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h03.


 
 
 
 
Partenaires

Hébergement Web