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

DBD::MySQL et Unicode pour caractères japonais

3 réponses
Avatar
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();
}

...

3 réponses

Avatar
HDL
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

Avatar
Jb Van Puyvelde
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

Avatar
Alex Marandon
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 :)