[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