Schrift
[thread]3636[/thread]

Mysql 5, DBI, PERL + Unicode :)

Leser: 3


<< |< 1 2 >| >> 18 Einträge, 2 Seiten
dassmann
 2005-11-06 15:15
#33731 #33731
User since
2005-01-28
9 Artikel
BenutzerIn
[default_avatar]
Hi!

Wenn ich mit DBI eine Tabelle (die UTF8 ist) aus der Mysql db auslese, kommen z.b. die umlaute nurnoch als Wirrwarr an. Kann mir jemand sagen wie ich das beheben kann? Mein ganzes System ist eigentlich UTF8, und Perl sollte damit auch keine Probleme haben - ausser vielleicht im DBI Modul.

Danke
GwenDragon
 2005-11-06 18:07
#33732 #33732
User since
2005-01-17
14532 Artikel
Admin1
[Homepage]
user image
use utf8 benutzt?

Welches Perl benutzt du denn?\n\n

<!--EDIT|GwenDragon|1131293884-->
die Drachin, Gwendolyn


Unterschiedliche Perl-Versionen auf Windows (fast wie perlbrew) • Meine Perl-Artikel

dassmann
 2005-11-06 19:16
#33733 #33733
User since
2005-01-28
9 Artikel
BenutzerIn
[default_avatar]
ja eigentlich schon

perl -v:

This is perl, v5.8.7 built for x86_64-linux
ptk
 2005-11-06 21:29
#33734 #33734
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
[quote=GwenDragon,06.11.2005, 17:07]use utf8 benutzt?

Welches Perl benutzt du denn?[/quote]
Nein, nein und nochmals nein. "use utf8" ist in den seltesten Fällen die Lösung für utf8-Probleme.
ptk
 2005-11-06 21:32
#33735 #33735
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
[quote=dassmann,06.11.2005, 14:15]Hi!

Wenn ich mit DBI eine Tabelle (die UTF8 ist) aus der Mysql db auslese, kommen z.b. die umlaute nurnoch als Wirrwarr an. Kann mir jemand sagen wie ich das beheben kann? Mein ganzes System ist eigentlich UTF8, und Perl sollte damit auch keine Probleme haben - ausser vielleicht im DBI Modul.[/quote]
Genau. Beim Verlassen von Perl (also I/O, Kommunikation mit Datenbanken etc.) muss man genau schauen, was man bekommt bzw. was die Gegenseite erwartet. Ich mache das meistens mit Dump() aus Devel::Peek. Damit kann das geübte Auge erkennen, ob man bereits Characters hat (dann ist das UTF8-Flag gesetzt) oder nur Octets hat. Im letzteren Fall muss man manuell decode() aus Encode verwenden.
dassmann
 2005-11-07 09:06
#33736 #33736
User since
2005-01-28
9 Artikel
BenutzerIn
[default_avatar]
ähm ok. Sorry wenn ich jetzt nachfrag, aber ich kann nochnet soo gut perl, als dass ich das so hinkriegen könnte *g*. Ich habs zwar mal mit Decode/Encode probiert, aber das hat zu keinem geschwünschten ergebnis geführt.
Das auslesen hab ich ja jetzt hingekreigt, doch das nächste was nicht geht ist Daten in die DB speichern. Die kommen offenbar immer im falschen encoding an. Kannst mir bitte mal jemand die paar Zeilen code aufschreiben, die nötig sind, dass es anständig funktioniert?

DANKE
ptk
 2005-11-07 12:37
#33737 #33737
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Ich hoffe, die Variablennamen sprechen für sich:
Code: (dl )
1
2
$daten_fuer_die_datenbank = Encode::encode("utf-8", $daten);
$daten = Encode::decode("utf-8", $daten_aus_der_datenbank);
dassmann
 2005-11-07 16:32
#33738 #33738
User since
2005-01-28
9 Artikel
BenutzerIn
[default_avatar]
Hm so hab ichs auch schonmal probiert :). Doch leider funktionierts so nicht
ptk
 2005-11-07 17:49
#33739 #33739
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Was heißt "funktioniert nicht"? Gibt es Fehlermeldungen, oder sind die Umlaute zerschossen? Kannst du minimalen Code produzieren, der zeigt, was du machst?
dassmann
 2005-11-08 16:38
#33740 #33740
User since
2005-01-28
9 Artikel
BenutzerIn
[default_avatar]
Die Umlaute sind zerschossen.

$dbh = DBI->connect("DBI:mysql:$db", $uname, $pw");
$dbh->do( "INSERT INTO `db` ($keys) VALUES ($values)" );

Dann sind die Umlaute zerschossen. Selbst wenn ich noch $keys = encode ("utf-8", $keys); davorschiebe hilft das nicht.

Achja, die Daten kommen aus einem HTML-Form
<< |< 1 2 >| >> 18 Einträge, 2 Seiten



View all threads created 2005-11-06 15:15.