Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

pb utf8 (perl ou mysql ??)

1 réponse
Avatar
paul POULAIN
Bonjour,

Je deviens un peu fou avec la migration de Koha vers utf8.
Actuellement, la base mysql est en iso8859-1, avec mysql 4.1.
Tout le soft est écrit en Perl

La plateforme est la suivante :
* données dans mysql 4.1
* traitement CGI Perl (version 5.8.7 de mandriva 2006)
* couche présentation des données construite avec HTML::Template

* Je modifie ma base avec :
ALTER TABLE tbl_name CONVERT TO CHARACTER SET utf8
comme l'indique
http://www.nexen.net/docs/mysql/annotee/alter-table.php?lien=alter+table

* je modifie l'en tête des templates pour avoir :
<meta http-equiv="Content-Type" content="text/html; charset=utf8">

Mais si je regarde la table que je viens de modifier dans Koha, le tout est
toujours en iso8859-1 parce que les accents apparaissent comme une petite
virgule, et si je force l'affichage en iso8859 dans firefox, ils
apparaissent correctement.
Si je modifie ou ajoute une ligne dans phpMyAdmin, les accents restent
incorrects.

J'ai affiché dans les logs apache les données lues, et je vois par exemple
collectivit\xe9 ou acc\xe8s. Il y a donc un changement, puisqu'avant,
j'avais les accents corrects.

J'ai tenté plusieurs choses, mais là, je deviens un peu fou !!!

J'aimerai que les spécialistes Perl me confirment que du coté Perl je n'ai
rien de particulier à faire (use utf8; dans les sources me semble inutile
vu que les sources sont en ascii pur)
Si les spécialistes de mySQL peuvent me donner des nouvelles pistes...

PS : question déjà posée hier dans des termes un peu différents sur
f.c.a.sgbd, mes les 2 réponses qui m'ont été apportées ne m'aident pas,
merci quand même.
--
Paul

1 réponse

Avatar
paul POULAIN
loufoque wrote:

Je deviens un peu fou
Executer la requête

SET NAMES 'utf8'
au début du script.


YYYYYYYYEEEEEEEEEESSSSSSSSSSSS

C'était plutôt laconique comme proposition et il m'a fallu creuser, mais
c'était ça !

Par défaut, la communication entre mysql-server et le mysql-client
s'effectue en latin1 !
Il doit être possible de mettre utf8 dans les paramètres de mySQL
(/etc/my.cnf), mais si on fait ça, TOUTES les bases se mettent à causer en
utf8, ce qui peut avoir des effets de bord regrettables !

Donc, j'ai simplement modifié la fonction de connexion à mySQL qui ressemble
maintenant à ça :
my $dbh= DBI->connect("DBI:$db_driver:$db_name:$db_host",
$db_user, $db_passwd);
$dbh->do("set NAMES 'utf8'");


et hop, ça fonctionne !!!

quelques explications plus détaillées ici :
http://www.nexen.net/mysql/set-option.php :

NAMES {'charset_name' | DEFAULT}
SET NAMES spécifie les valeurs des trois variables systèmes de session
character_set_client , character_set_connection et
character_set_results avec le jeu de caractères donné.La valeur par
défaut de ces variables peut être rappelée avec DEFAULT .

Notez que la syntaxe de SET NAMES diffère en cela des autres options.
Cette commande est disponible depuis MySQL 4.1.0.


Merci mille fois, pas si loufoque que ca !!!
--
Paul