Établir la connection en UTF-8 avec la base

Bonjour,

j'ai essayé de chercher sur la liste avec divers mots-clés et n'ai rien
trouvé, donc je vous soumets mon problème et m'excuse s'il a déjà été traité.

Ma situation actuelle est la suivante :
- SPIP est en UTF-8;
- les tables de mysql sont en latin1;
- la connection entre les deux s'établit en latin1 (SET CHARACTER SET latin1).

En conséquence et comme on peut s'y attendre, tout s'affiche correctement
du côté de SPIP (exemple : Journée mondiale pour le travail décent) mais pas
du côté de MySQL (même exemple : Journée mondiale pour le travail
décent).

Pour divers raisons, j'aimerais que l'affichage soit correct aussi du côté de
mysql. La convertion des tables en utf-8 est désagréable mais ne pose pas
techniquement de véritables problèmes. Par contre, changer l'encodage de la
connexion à la base me pose problème, d'autant plus que MySQL ne fait par lui-
même aucune conversion, et se retrouve alors à envoyer de l'utf-8 en tant que
latin1 (!), à la suite de quoi SPIP tente de convertir en utf-8 ce qui est en
fait déjà de l'utf-8, avec la catastrophe à l'affichage qu'on peut imaginer.

En fait, je ne peux changer le GLOBAL CHARACTER SET car la base est accueillie
par un hébergement partagé. Si on ne précise rien, la connexion s'établit donc
automatiquement en latin1. C'est donc à SPIP de réclamer explicitement de
l'utf-8 quand il établit la connexion, mais je n'ai pas trouvé où et comment
faire, et c'est ici que je fais appel à votre aide et à votre expertise.

Cordialement, Jean-Sébastien Lebacq.

Et convertir tes tables en UTF-8 via phpmyadmin ?
Ou faire un dump et le convertir ?

-----Message d'origine-----
De : spip-bounces@rezo.net [mailto:spip-bounces@rezo.net] De la part de
Jean-Sébastien Lebacq
Envoyé : dimanche 9 novembre 2008 15:34
À : spip@rezo.net
Objet : [Spip] Établir la connection en UTF-8 avec la base

Bonjour,

j'ai essayé de chercher sur la liste avec divers mots-clés et n'ai rien
trouvé, donc je vous soumets mon problème et m'excuse s'il a déjà été
traité.

Ma situation actuelle est la suivante :
- SPIP est en UTF-8;
- les tables de mysql sont en latin1;
- la connection entre les deux s'établit en latin1 (SET CHARACTER SET
latin1).

En conséquence et comme on peut s'y attendre, tout s'affiche correctement
du côté de SPIP (exemple : Journée mondiale pour le travail décent) mais pas

du côté de MySQL (même exemple : Journée mondiale pour le travail
décent).

Pour divers raisons, j'aimerais que l'affichage soit correct aussi du côté
de
mysql. La convertion des tables en utf-8 est désagréable mais ne pose pas
techniquement de véritables problèmes. Par contre, changer l'encodage de la
connexion à la base me pose problème, d'autant plus que MySQL ne fait par
lui-
même aucune conversion, et se retrouve alors à envoyer de l'utf-8 en tant
que
latin1 (!), à la suite de quoi SPIP tente de convertir en utf-8 ce qui est
en
fait déjà de l'utf-8, avec la catastrophe à l'affichage qu'on peut imaginer.

En fait, je ne peux changer le GLOBAL CHARACTER SET car la base est
accueillie
par un hébergement partagé. Si on ne précise rien, la connexion s'établit
donc
automatiquement en latin1. C'est donc à SPIP de réclamer explicitement de
l'utf-8 quand il établit la connexion, mais je n'ai pas trouvé où et comment

faire, et c'est ici que je fais appel à votre aide et à votre expertise.

Cordialement, Jean-Sébastien Lebacq.
_______________________________________________
liste spip
spip@rezo.net - désabonnement : spip-off@rezo.net

Infos et archives : http://listes.rezo.net/mailman/listinfo/spip

Documentation de SPIP : http://www.spip.net/

irc://irc.freenode.net/spip ou
http://embed.mibbit.com/?server=irc.freenode.net&channel=%23spip

Le dimanche 9 novembre 2008 16:25:33, vous avez écrit :

Et convertir tes tables en UTF-8 via phpmyadmin ?
Ou faire un dump et le convertir ?

Ce n'est pas la convertion des tables en utf-8 qui pose problème. C'est faire
en sorte qu'après la connexion s'établisse AUSSI en utf-8 qui pose difficulté.

Cordialement, Jean-Sébastien Lebacq.

Si tu as une base en UTF-8 ca poserait déjà moins de soucis.

-----Message d'origine-----
De : Jean-Sébastien Lebacq [mailto:js.lebacq@free.fr]
Envoyé : dimanche 9 novembre 2008 16:35
À : Samy RABIH
Cc : spip@rezo.net
Objet : Re: [Spip] Établir la connection en UTF-8 avec la base

Le dimanche 9 novembre 2008 16:25:33, vous avez écrit :

Et convertir tes tables en UTF-8 via phpmyadmin ?
Ou faire un dump et le convertir ?

Ce n'est pas la convertion des tables en utf-8 qui pose problème. C'est
faire
en sorte qu'après la connexion s'établisse AUSSI en utf-8 qui pose
difficulté.

Cordialement, Jean-Sébastien Lebacq.

Le dimanche 9 novembre 2008 16:36:51, vous avez écrit :

Si tu as une base en UTF-8 ca poserait déjà moins de soucis.

Chose que j'avais faite, mais j'ai du faire machine arrière à cause du
problème que je décris et pour lequel je vous demande votre aide.

Cordialement, JSL.

Bonjour,

Certes la base concernée dans mon cas
n'était pas celle de Spip, mais une base complémentaire que j'attaque
directement, ce qui m'a obligé à envoyer à un SET NAMES "utf8" à MySql.
Après quoi tout était ok.

Nous faisons la même analyse. Mon problème, c'est justement que je ne sais pas
faire envoyer par SPIP un «SET NAMES "utf8"», je n'ai pas la moindre idée du
fichier qu'il faut éditer pour y ajouter cette commande. (je rappelle que je
n'ai pas les droits nécessaires pour faire un «SET GLOBAL NAMES "utf8"», ce
qui aurait réglé la question)

Enfin, je ne ne saisis pas en quoi consiste le problème d'affichage "du
côté de MySql" ? Affichage de quoi, et à travers quelle interface ?
PhpMyAdmin ? Autre chose...?

Je l'ai expérimenté avec PHPMyAdmin (qui lui a le bon goût de demander un «SET
NAMES "utf8"» ;)), mais ça devrait être la même chose avec n'importe-quel
client : les chaînes de caractères, qui sont en fait de l'utf-8, sont affichées
octet par octet même quand la norme utf8 demande à ce qu'ils soient traités
ensembles pour n'afficher qu'un caractère.

À défaut d'avoir une solution, je suis heureux de voir que j'ai réussi à me
faire comprendre :slight_smile:

Cordialement, Jean-Sébastien Lebacq.

Jean-Sébastien Lebacq a écrit :

Certes la base concernée dans mon cas n'était pas celle de Spip, mais
une base complémentaire que j'attaque directement, ce qui m'a obligé à
envoyer à un SET NAMES "utf8" à MySql. Après quoi tout était ok.

Nous faisons la même analyse. Mon problème, c'est justement que je ne
sais pas faire envoyer par SPIP un «SET NAMES "utf8"», je n'ai pas la
moindre idée du fichier qu'il faut éditer pour y ajouter cette commande.

Bonjour,

Désolé, je réponds très tardivement à cette discussion, mais ça peut
aider d'autres personnes.

Pour SPIP 2.0, il suffit de rajouter, dans le fichier config/connect.php,
en dernière ligne avant le "?>", la commande

mysql_query('SET NAMES utf8');

Ça fonctionne de mon côté.

Amicalement,
--
Trois Singes