DBD::MySQL et Unicode pour caractères japonais

Le
Jb Van Puyvelde
Hello,

j'aimerais insérer dans une table mysql des caractères japonais mais je
n'obtiens que des "trucs bizarres".

En gros, je voudrais découper une page html japonaise en petits morceaux,
les trier et insérer les N-premiers dans la table.

Pas de problème pour lire la page et afficher les morceaux à l'écran
grâce à l'utilisation du module Encode, seul l'insertion dans la table
pose problème. La table utilise bien évidemment le charset utf8,
coallition utf8_unicode_ci;

De ce que j'ai pu lire, DBI devrait supporter l'unicode, mais p-ê que
DBD::MySQL ne le gère pas. Bref, si vous avez des idées pour résoudre ce
problème, ça m'intéresse.

Merci d'avance,

Jb




# Je débute en Perl, donc n'hésitez pas à me faire des remarques
# sur le style, même si ce n'est pas ça qui m'intéresse principalement.

Use Encode;

my ($dbh,$file,$page,$del_useless_ngrams,$DocId);
my $del_useless_ngrams = decode('UTF-8', '[A-Za-z0-9 ()<>=].*');



sub ngram_indexer {
my (@ngrams, @sNgrams, $count);
my $query = "INSERT INTO Ngram_".$size."_".$quantity." VALUES ";

for(my $i=0; $i < length($page); $i++) {
my $chunk = substr($page, $i, $size);
if ($chunk && $chunk !~ m#$del_useless_ngrams#) {
push @ngrams, $chunk;
}
}

@sNgrams = sort @ngrams;

$count = 0;
foreach (@sNgrams) {
$query .= "(".$DocId.", ".$dbh->quote($_)."),";
$count++;
if($count == $quantity) {
last;
}
}

chop($query);
my $sth = $dbh->prepare("$query;");
$sth->execute();
}

Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
HDL
Le #141598
Hello,

j'aimerais insérer dans une table mysql des caractères japonais mais je
n'obtiens que des "trucs bizarres".

En gros, je voudrais découper une page html japonaise en petits morceaux,
les trier et insérer les N-premiers dans la table.

Pas de problème pour lire la page et afficher les morceaux à l'écran
grâce à l'utilisation du module Encode, seul l'insertion dans la table
pose problème. La table utilise bien évidemment le charset utf8,
coallition utf8_unicode_ci;

De ce que j'ai pu lire, DBI devrait supporter l'unicode, mais p-ê que
DBD::MySQL ne le gère pas. Bref, si vous avez des idées pour résoudre ce
problème, ça m'intéresse.

Merci d'avance,

Jb


DBD::Mysql semble effectivement "fâché" avec l'utf8.
Voir :
http://www.simplicidade.org/notes/archives/2005/12/utf8_and_dbdmys.html

Tu peux aussi utiliser des patchs de DBD::Mysql
http://marc.info/?l=msql-mysql-modules&m1970179409036&w=2
ou utiliser UTF8DBI.

Voir maintenant si la version 5 de mysql ou la nouvelle version de
DBD::mysql n'intègre pas ce patch.

HTH.
--
HDL

Jb Van Puyvelde
Le #141597
Le Mon, 02 Apr 2007 23:16:32 +0200, HDL a écrit:
DBD::Mysql semble effectivement "fâché" avec l'utf8. Voir :
http://www.simplicidade.org/notes/archives/2005/12/utf8_and_dbdmys.html

Tu peux aussi utiliser des patchs de DBD::Mysql
http://marc.info/?l=msql-mysql-modules&m1970179409036&w=2 ou utiliser
UTF8DBI.

Voir maintenant si la version 5 de mysql ou la nouvelle version de
DBD::mysql n'intègre pas ce patch.


Ces différentes solutions semblent fonctionner pour la lecture seulement.
Malgré l'énorme quantité de modules dispos, il n'y aurait rien en Perl
pour écrire en utf8 dans une base ? Dites moi que c'est pas vrai ;)

Jb

Alex Marandon
Le #141596
Jb Van Puyvelde wrote:

Le Mon, 02 Apr 2007 23:16:32 +0200, HDL a écrit:
Ces différentes solutions semblent fonctionner pour la lecture seulement.
Malgré l'énorme quantité de modules dispos, il n'y aurait rien en Perl
pour écrire en utf8 dans une base ? Dites moi que c'est pas vrai ;)


C'est pas vrai ! Chez moi, avec PostgreSQL et DBD::Pg, il n?y a aucun
probleme :)

Publicité
Poster une réponse
Anonyme