Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Unicode (2) mysql

2 réponses
Avatar
Newsgroups
Bonjour,

J'ai quasiment le m=EAme souci que le message pr=E9c=E9dent ; sauf que pour
moi, le probl=E8me est plut=F4t au niveau de l'=E9criture dans mysql (inser=
t).

Voici mes =E9l=E9ments :
- je ne controle pas les donn=E9es source, je ne connais donc pas
forc=E9ment l'encodage des textes. J'utilise quand m=EAme HTML::Encoding
pour le d=E9tecter...
Donc, je souhaite avoir une bdd uniforme et de pr=E9f=E9rence en utf-8 (je
ne veux pas me retrouver avec tantot du iso et tantot du utf-8...)

- je peux choisir l'encodage de ma bdd mysql ; j'ai essay=E9
utf8_unicode_ci, utf8_general_ci, utf8_bin

- j'utilise la librairie DBI pour me connecter =E0 mysql

- la lecture de la bdd se fait par des scripts PHP et le header renvoi
les donn=E9es en utf-8 et l'encodage html est lui aussi utf-8

Donc, qu'est ce que vous me conseillez pour mon cas ?
Merci

2 réponses

Avatar
Nicolas George
Newsgroups wrote in message :
Donc, qu'est ce que vous me conseillez pour mon cas ?


Je ne connais absolument rien à mysql, donc je ne peux pas te conseiller à
ce niveau. En revanche, une chose qu'il est important de surveiller au
niveau de Perl, c'est que tous les scalaires contenant du texte Unicode
renvoient bien vrai au test utf8::is_utf8. Si ce n'est pas le cas, c'est que
Perl n'est pas informé de la nature des variables qu'il manipule, et ça va
échouer quelque part.

Avatar
Newsgroups
une chose qu'il est important de surveiller au
niveau de Perl, c'est que tous les scalaires contenant du texte Unicode
renvoient bien vrai au test utf8::is_utf8.


mon test me renvoi 1.
En fait, j'ai fais le test suivant qui donne les résultats suivants :
- dans la console, c'est ok,, il s'affiche :
"INSERT INTO test (mot) VALUES ('éàçèîïùüû~#èì') --> 1"

- par contre, phpMyAdmin m'affiche "éà çèîïà ¹Ã¼Ã»~#èì"

Voici le script perl complet de mon test :

#!/usr/bin/perl
use lib::Common;
binmode STDOUT, ":utf8";
use utf8;
use DBI;

my $dsn = "DBI:mysql:database=".$database.";host=".$hostname;
my $dbh = DBI->connect($dsn, $login, $password) or die "echec cnx";

$dbh->{"mysql_enable_utf8"} = 1;

my $q = "INSERT INTO test (mot) VALUES ('éàçèîïùüû~#è ì')";
print $q." --> ".utf8::is_utf8($q)."n";

my $sth = $dbh->prepare($q);
$sth->execute();