mySQL5 et encodage du texte

Bonjour,

Mon hébergeur (hébergement gratuit par un pote) est passé sous mySQL 5 (et Apache 2) sans possibilité de retour en arrière. Ce qui est bien regretable car depuis, les sites à contenu dynamique ont de sérieux problèmes d'ancodage du texte.

Selon les CMS utilisés, une reinstall a parfois fait l'affaire, mais pas toujours.

Par exemple, pour un spip installé (1.8pre1 : oui. je sais, je devrais le mettre à jour), encodage en iso, tout ce qui était accentué passait mal. J'ai passé le site en utf 8 par la spip-contrib changer-charset. La mise à jour semble fonctionner, mais les accents passent toujours mal (mais une différente sorte de mal : il y a donc bien eu mise à jour de la base de donnée).

Est-ce que quelqu'un a connu ça ?

Quels sont les autres précisions techniques qui pourraient être utile ?

Merci d'avance...

Bonjour

un élément de réponse sur :
http://thread.gmane.org/gmane.comp.web.spip.user/70803/focus=71561

Jerome Carujo a écrit :

Bonjour,

Mon hébergeur (hébergement gratuit par un pote) est passé sous mySQL 5 (et Apache 2) sans possibilité de retour en arrière. Ce qui est bien regretable car depuis, les sites à contenu dynamique ont de sérieux problèmes d'ancodage du texte.

Selon les CMS utilisés, une reinstall a parfois fait l'affaire, mais pas toujours.

Par exemple, pour un spip installé (1.8pre1 : oui. je sais, je devrais le mettre à jour), encodage en iso, tout ce qui était accentué passait mal. J'ai passé le site en utf 8 par la spip-contrib changer-charset. La mise à jour semble fonctionner, mais les accents passent toujours mal (mais une différente sorte de mal : il y a donc bien eu mise à jour de la base de donnée).

Est-ce que quelqu'un a connu ça ?

Quels sont les autres précisions techniques qui pourraient être utile ?

Merci d'avance...

_______________________________________________
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
FAQ : http://www.spip-contrib.net/spikini/FaQ
---------------------------------------------------------------------------------------
Wanadoo vous informe que cet e-mail a ete controle par l'anti-virus mail. Aucun virus connu a ce jour par nos services n'a ete detecte.

On Sat, 2006-05-13 at 17:54 +0200, Jerome Carujo wrote:

Quels sont les autres précisions techniques qui pourraient être utile ?

  Déjà, peut tu préciser ce que tu vois sur le site : là ou il devrait
y avoir un "é", tu vois un "?" un carré, ou un "é" (A majuscule tilde,
copyright) ?

  Comme tu n'as plus accès à la version précédente de mysql, c'est
difficile de savoir ce qui a changé, cependant, j'ai l'impression que
ton hébergeur a changé le charset de la base en même temps que sa
version (celui utilisé pour la connexion à priori, et pas celui pour
le stockage, ou alors c'est qu'ils sont vraiment sauvages :slight_smile: ).

  Pour en savoir plus, il faudrait essayer les choses suivantes, via un
phpMyAdmin ou une console mysql si tu y a accès.
  Tout d'abord, repérer un ancien article contenant des accents dans
l'un des champs (titre, surtitre ...) autres que le texte (qui est
géré de façon particulière en spip). S'il c'est le titre de l'article
42 par exemple, faire maintenant :

  select char_length(titre), length(titre)
    from spip_articles
   where id_article=42;

  Si le char_length et le length ont des valeurs différentes, c'est que
la base stocke les données en utf.
  L'écart entre les deux doit être égal au nombre de lettres
accentuées dans le texte (en clair, en utf, il faut 2 octets pour
stocker un "é").

  Maintenant (si le texte est assez court pour le faire à main, sinon,
c'est pénible), si le char_length est différent de ce que tu peux
compter à la main (sans oublier les retours à la ligne et les espaces),
c'est que spip écrit de l'utf que mysql prend pour le l'iso.

  Dans ce cas, la solution consiste peut être simplement à mettre
spip_query("set names 'utf8'");
  juste après le spip_connect_db(...) dans le fichier
ecrire/inc_connect.php3

--
À+, Pif.

On 15 mai 06, at 08:57, christian lefebvre wrote:

On Sat, 2006-05-13 at 17:54 +0200, Jerome Carujo wrote:

Quels sont les autres précisions techniques qui pourraient être utile ?

  Déjà, peut tu préciser ce que tu vois sur le site : là ou il devrait
y avoir un "é", tu vois un "?" un carré, ou un "é" (A majuscule tilde,
copyright) ?

  Pour en savoir plus, il faudrait essayer les choses suivantes, via un
phpMyAdmin ou une console mysql si tu y a accès.
  Tout d'abord, repérer un ancien article contenant des accents dans
l'un des champs (titre, surtitre ...) autres que le texte (qui est
géré de façon particulière en spip). S'il c'est le titre de l'article
42 par exemple, faire maintenant :

  select char_length(titre), length(titre)
    from spip_articles
   where id_article=42;

  Si le char_length et le length ont des valeurs différentes, c'est que
la base stocke les données en utf.
  L'écart entre les deux doit être égal au nombre de lettres
accentuées dans le texte (en clair, en utf, il faut 2 octets pour
stocker un "é").

  Maintenant (si le texte est assez court pour le faire à main, sinon,
c'est pénible), si le char_length est différent de ce que tu peux
compter à la main (sans oublier les retours à la ligne et les espaces),
c'est que spip écrit de l'utf que mysql prend pour le l'iso.

  Dans ce cas, la solution consiste peut être simplement à mettre
spip_query("set names 'utf8'");
  juste après le spip_connect_db(...) dans le fichier
ecrire/inc_connect.php3

--
À+, Pif.

Merci pour ton aide tres detaillee

Voici ce que ca m'a donné

Titre (une seule lettre accentuée, un e majuscule qui donne A majuscule tilde copyright.

Nouveau dessin animÃ(c) pour Hayao Miyazaki

Résultat de la commande dans phpmyadmin
char_length(titre) 41
length(titre) 41

Du coup je ne sais toujours pas quoi faire...

On 2006-05-15 08:57:01 +0200, christian lefebvre <christian.lefebvre@atosorigin.com> said:

On Sat, 2006-05-13 at 17:54 +0200, Jerome Carujo wrote:

Quels sont les autres précisions techniques qui pourraient être utile

?
  Déjà, peut tu préciser ce que tu vois sur le site : là ou il devr ait
y avoir un "é", tu vois un "?" un carré, ou un "é" (A majuscule ti lde,
copyright) ?

  Comme tu n'as plus accès à la version précédente de mysql, c'est
difficile de savoir ce qui a changé, cependant, j'ai l'impression que
ton hébergeur a changé le charset de la base en même temps que sa
version (celui utilisé pour la connexion à priori, et pas celui pour
le stockage, ou alors c'est qu'ils sont vraiment sauvages :slight_smile: ).

  Pour en savoir plus, il faudrait essayer les choses suivantes, via un
phpMyAdmin ou une console mysql si tu y a accès.
  Tout d'abord, repérer un ancien article contenant des accents dans
l'un des champs (titre, surtitre ...) autres que le texte (qui est
géré de façon particulière en spip). S'il c'est le titre de l'artic le
42 par exemple, faire maintenant :

  select char_length(titre), length(titre)
    from spip_articles
   where id_article=42;

  Si le char_length et le length ont des valeurs différentes, c'est que
la base stocke les données en utf.
  L'écart entre les deux doit être égal au nombre de lettres
accentuées dans le texte (en clair, en utf, il faut 2 octets pour
stocker un "é").

  Maintenant (si le texte est assez court pour le faire à main, sinon,
c'est pénible), si le char_length est différent de ce que tu peux
compter à la main (sans oublier les retours à la ligne et les espaces),
c'est que spip écrit de l'utf que mysql prend pour le l'iso.

  Dans ce cas, la solution consiste peut être simplement à mettre
spip_query("set names 'utf8'");
  juste après le spip_connect_db(...) dans le fichier
ecrire/inc_connect.php3

--
À+, Pif.

On Tue, 2006-05-16 at 07:46 +0200, Jerome Carujo wrote:
Voici ce que ca m'a donné

Titre (une seule lettre accentuée, un e majuscule qui donne A
majuscule tilde copyright.

Nouveau dessin animÃ(c) pour Hayao Miyazaki

Résultat de la commande dans phpmyadmin
char_length(titre) 41
length(titre) 41
J'ai donc l'impression que le résultat est correct !
Dans la config spip, tu as précisé utf-8 c'est bien ça ?
Dans tes squelettes, il y a bien une balise meta avec #CHARSET ?

est-ce que le site est visible en ligne, que je puisse regarder ?

--
À+, Pif.

-------------------------

Oui, le site est en ligne et en y regardant de plus près (ce n'est pas vraiment mon site, c'est un site que j'ai mis en place pour une amie prof de français qui l'utilise dans la cadre de son cours), c'est un joyeux mélange de tout (A majuscule tilde copyright, points d'interrogation, et accents corrects)...

_<;;;

il est visible à cette adresse http://jef.journal-fle.net/

Encore merci de l'aide ^_^b

Jerome

On 2006-05-17 08:20:02 +0200, Jerome Carujo <jerome.carujo@edufle.net> said:

Oui, le site est en ligne et en y regardant de plus près (ce n'est pas
vraiment mon site, c'est un site que j'ai mis en place pour une amie
prof de français qui l'utilise dans la cadre de son cours), c'est un
joyeux mélange de tout (A majuscule tilde copyright, points
d'interrogation, et accents corrects)...

il est visible à cette adresse http://jef.journal-fle.net/

Encore merci de l'aide ^_^b

Jerome

Peut-être une indication utile :
Il y a des différences dans le corps de l'article entre ceux publiés avant le passage à mySQL5, par exemple http://jef.journal-fle.net/article.php3?id_article=100
et ceux publiés après http://jef.journal-fle.net/article.php3?id_article=101
(regarder notamment le post-scriptum de l'article)

Il n'y a pas eu de publication depuis que j'ai passé le site en UT8 via la spip-contrib, mais je vais faire un test aujourd'hui pour voir si ça donne autre chose.

A bientôt,

Jerome