[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