[Perl] Modules DBI et utf8

Sébastien Feugère sebastien at feugere.net
Dim 14 Juin 12:54:25 CEST 2026


Pourquoi ne pas tenter de rester sur MySQL 10 si le problème vient de là? Ou tenter une version plus ancienne de DBI?

Sébastien Feugère

> Le 14 juin 2026 à 10:08, Philippe Delavalade <philippe.delavalade at orange.fr> a écrit :
> 
> Bonjour Dan et tous.
> 
> Désolé d'avoir tant tarder à répondre mais j'ai été absent pendant une
> semaine.
> 
> J'essaierai la solution mais ça me semble compliqué ; j'envisage même de
> passer à Python (je sais c'est presque du sacrilège).
> 
> Merci encore.
> 
> --
> Philippe
> 
>> Le dimanche 07 juin à 12:07, dan.leib at orange.fr (imap) a écrit :
>> Bonjour
>> 
>> Très récemment j’ai eu un souci du même genre : je suis passé de Windows 10
>> à Windows 11 et les caractères accentués s’insérer mal dans mysql et même
>> dans mon script perl un regexp qui contenait des caractères accentués
>> étaient suite à une mauvaise manip transformé en ???
>> J’ai ouvert un script créé en ANSI en utf8 et ça a donné cela !
>> 
>> Je me suis servie de chatgpt qui m’a fait faire plusieurs choses :
>> 
>> ·mon regexp :  my $regxp_substitute_val =
>> '[^\w\s\'\"\\\/,:.\-\+zéèàùâêîôûäëïöüçÉÈÀÙÂÊÎÔÛÄËÏÖÜÇ@]';
>> a été transformé en : my $regxp_substitute_val =
>> qr/[^0-9A-Za-z_*\s*'"*\\\/*,:.*\-\+\p{Latin}*@*\x{00B0}*]/u;   car il ne
>> faut pas mettre en dur des caractères non ASCII : ça peut poser problème
>> quand on change de système.
>> 
>> ·J’ouvre et lit mon fichier qui contient les lignes à insérer ainsi :
>> open(my $in,  "<:encoding(UTF-8)", $fichier_entree) or die "Impossible
>> d'ouvrir $fichier_entree : $!";
>> 
>> ·Avant les insertions je faisais un : "SET NAMES latin1"
>> Maintenant je fais un "SET NAMES utf8mb4 "
>> 
>> ·Dans mon script je sélectionne des résultats d’un table que j’injecte dans
>> une autre table et je ne passe pas par un insert into
>> DBD::mysql renvoie des octets UTF8 et non des une chaine unicode donc avant
>> d’inserer je fais un decode("UTF-8", $ligne{$key}); et je fais un use Encode
>> qw(encode decode)
>> 
>> Pour comprendre les soucis chatgpt m’a conseillé de lire https://www.joelonsoftware.com/2003/10/08/the-absolute-minimum-every-software-developer-absolutely-positively-must-know-about-unicode-and-character-sets-no-excuses/
>> qui explique bien les différents encodage, l’historique, …
>> 
>> J’ai aussi appris à lire les différentes tables unicode :
>> 
>> ·https://www.joelonsoftware.com/2003/10/08/the-absolute-minimum-every-software-developer-absolutely-positively-must-know-about-unicode-and-character-sets-no-excuses/
>> 
>> 
>> ·https://www.fileformat.info/info/unicode/utf8.htm
>> 
>> ·https://www.fileformat.info/info/unicode/utf8test.htm
>> 
>> Il y a aussi les docs unicode de perl à lire :
>> 
>> ·Intro : https://perldoc.perl.org/perluniintro
>> <https://perldoc.perl.org/perluniintro>
>> 
>> ·Details : https://perldoc.perl.org/perlunicode
>> <https://perldoc.perl.org/perlunicode>
>> 
>> ·https://perldoc.perl.org/Encode
>> 
>> ·https://perldoc.perl.org/utf8
>> 
>> Avant ce souci je ne comprenais rien à ces histoires d’encodage et
>> d’ailleurs je ne cherchais pas à le faire mais maintenant je comprends
>> pourquoi ça fait cela même si je suis encore loin de maitriser.
>> 
>> Chatgpt n’a pas seulement corriger mon souci mais m’à aider à comprendre en
>> m’orientant vers les bonnes sources
>> 
>> En espérant vous avoir été utile
>> 
>> Bonne journée
>> 
>> --
>> Danièle LEIBOVICI
>> 
>> 
>>> Le 06/06/2026 à 09:50, Philippe Delavalade a écrit :
>>> Bonjour.
>>> 
>>> Une question sans doute naïve mais...
>>> 
>>> Je viens de changer de distribution linux et du coup je passe de
>>> mariadb 10.5.29 à 12.2.2.
>>> 
>>> Du coup mes scripts perl posent problème au niveau des caractères.
>>> 
>>> Dans l'ancien système j'avais par exemple :
>>> 
>>> my $base = "dbi:mysql:nomdelabase;mysql_enable_utf8=1";
>>> 
>>> maintenant cela produit une erreur au sujet de mysql_enable_utf8=1.
>>> 
>>> Si je modifie ma ligne en
>>> 
>>> my $base = "dbi:MariaDB:nomdelabase";
>>> 
>>> plus d'erreur mais les caractères accentués utf8 ne passent plus.
>>> 
>>> Je ne sais pas s'il faut agir dans perl ou dans mariadb. Sur le web, j'ai
>>> trouvé des tas de choses au sujet des "character set" dans mariadb mais
>>> rien de vraiment clair et divers essais dans la configuration de mariadb
>>> (/etc/my.cnf.d/) n'ont rien donné.
>>> 
>>> Quelqu'un peut-il m'aider ?
>>> 
>>> À tout hasard je mets en pièce jointe un miniscript perl qui produit chez
>>> moi le souci en question.
>>> 
>>> Merci d'avance.
>>> 
>>> Cordialement.
>>> 
>>> 
>>> _______________________________________________
>>> Perl mailing list
>>> Perl at mongueurs.net
>>> http://listes.mongueurs.net/mailman/listinfo/perl
>>> Attention, les archives sont publiques
> 
>> _______________________________________________
>> Perl mailing list
>> Perl at mongueurs.net
>> http://listes.mongueurs.net/mailman/listinfo/perl
>> Attention, les archives sont publiques
> 
> _______________________________________________
> Perl mailing list
> Perl at mongueurs.net
> http://listes.mongueurs.net/mailman/listinfo/perl
> Attention, les archives sont publiques



Plus d'informations sur la liste de diffusion Perl