[Perl] DBI DBD::MySQL et UTF-8
Dominique Asselineau
asseline at telecom-paristech.fr
Mar 28 Juin 14:45:37 CEST 2016
Paul Gaborit wrote on Sat, Jun 25, 2016 at 08:55:43AM +0200
> Le 24/06/2016 15:50, Dominique Asselineau a écrit :
> >Je passe tout mes codes en Unicode (encodage UTF8) et je rencontre des
> >difficultés avec DBI/DBD::MySQL.
> >
> >Avec le paramètre "mysql_enable_utf8=1" passé à la connexion, l'entrée
> >et l'encodage des données dans un colonne de type varchar se passe bien,
> >tout semble correctement encodé dans la base de données (vérifié avec
> >un client mysql en console). Maintenant, quand je cherche à récupérer
> >les données, stockées dans du varchar donc, elles restent à l'état de
> >chaîne d'octets et ne sont donc pas décodées. En clair, les
> >opérations entrée et sortie ne sont pas symétriques.
>
> Un appel à
>
> $dbh->do('set names utf8');
>
> devrait aider...
Malheureusement non. Le résultat est toujours une chaîne d'octets
qu'il faut explicitement décoder par Encode::decode_utf8 si et
seulement si elle provient d'un type SQL char, varchar ou text.
Pour essayer de globaliser le traitement de la récupération de
données, peut-être faut-il dériver la classe DBI::st pour pouvoir
traiter le résultat du fetchrow de base afin de faire les décodages
appropriés. Peut-être n'ai-je pas suffisamment cherché mais je n'ai
rien trouvé de la sorte.
Dominique
--
Plus d'informations sur la liste de diffusion Perl