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
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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'");
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
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
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'");
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