Perl/MySQL Umlaute-Problem

Perl/MySQL Umlaute-Problem

am 26.07.2006 12:15:05 von j-w-b

Hallo NG,

hänge jetzt schon länger an folgendem Problem. Leider habe ich nichts
gefunden was mir weiterhilft und/oder verstehe das Problem/Thema nicht so
richtig.

VPS Webserver:
Linux 9.3
mysql-standard-5.0.22
perl-DBD-mysql-2.9004

Nun habe ich eine App in Perl geschrieben die von einer anderen Website
Daten per API abholt die in UTF-8 kommen. Ich wandle diese in Latin-1 um und
habe laut print-Ausgabe auch die richtigen Zeichen im SQL-Sting. Auch eine
Abfrage im Skript bestätigt mir das die Zeichen tatsächlich in Latin-1
umgewandelt wurden. In der Datenbank stehen aber alle Umlaute doch
unleserlich (wohl in UTF-8) und werden dann nach Ausgabe im Browser
ebenfalls unleserlich (z.B. "ö" als "ö") angezeigt.

Nun habe ich aber in der Datenbank schon vorgegebene Daten drinnen stehen
(per SQL-Statement eingefügt und mit lesbaren Umlauten!) die ich teilweise
im Skript einlese und mit den oben genannten Daten dann in der Datenbank
abspeichere. Die Umlaute dieser Daten stehen dann richtig in der
Datenbank.Auch wenn ich über das Sktipt in einem Formular die Umlaute
berichtige, werden diese dann richtig gespeichert und angezeigt.

Nun was ich garnicht verstehe:
Vor dem speichern in der Datenbank frage ich beide Variablen (die von der
anderen Quelle und die zuvor aus der Datenbank eingelesenen) nochmal auf die
Decodierung ab, beide sind laut Encode Latin-1. Wenn ichaber diese Daten nun
per Dumper() anzeige, werden die die richtig in der Datenbank gespeichert
werden auch in Dumper-Ausgabe richtig angezeigt, wobei bei den anderen für
ein ü als \x{fc} angezeigt wird.

Ich verstehe das nicht :-(
Wäre schön wenn jemand helfen könnte.

Gruß

Joachim

Re: Perl/MySQL Umlaute-Problem

am 26.07.2006 13:00:47 von eck

Joachim Böcker schrub im Jahre 26.07.2006 12:15:

> Nun habe ich eine App in Perl geschrieben die von einer anderen Website
> Daten per API abholt die in UTF-8 kommen. Ich wandle diese in Latin-1 um und
> habe laut print-Ausgabe auch die richtigen Zeichen im SQL-Sting. Auch eine
> Abfrage im Skript bestätigt mir das die Zeichen tatsächlich in Latin-1
> umgewandelt wurden. In der Datenbank stehen aber alle Umlaute doch
> unleserlich (wohl in UTF-8) und werden dann nach Ausgabe im Browser
> ebenfalls unleserlich (z.B. "ö" als "ö") angezeigt.

Stelle Deine Datenbank auf UTF-8 um in löse Dich von dem mistigen
8859-Krempel.

Wenn Du durchgehend UTF-8 verwendest, dann hast Du auch in der DB keine
Probleme mit z.B. dänischen oder ganz kyrillischen Sonderzeichen. Und du
musst nichts mehr konvertieren, weil UTF-8 sowieso jeder Browser kann.

--
B.Eckstein, eck@ivu.de Cheap, Fast, Good - pick any two of them
Die FAQ zu de.comp.hardware.netzwerke: http://how.to/dchn
Mozilla-Tips: http://mozilla-anleitung.de/ http://www.holgermetzger.de/

Re: Perl/MySQL Umlaute-Problem

am 26.07.2006 13:47:09 von j-w-b

> Stelle Deine Datenbank auf UTF-8 um in löse Dich von dem mistigen
> 8859-Krempel.
>
> Wenn Du durchgehend UTF-8 verwendest, dann hast Du auch in der DB keine
> Probleme mit z.B. dänischen oder ganz kyrillischen Sonderzeichen. Und du
> musst nichts mehr konvertieren, weil UTF-8 sowieso jeder Browser kann.

Hallo,

danke für den Tipp, aber das kann doch nicht die Lösung sein das ich dann
Hyroglifen in der Datenbank stehen habe!

Gruß

Joachim

Re: Perl/MySQL Umlaute-Problem

am 26.07.2006 13:58:43 von Frank Schenk

Joachim Böcker wrote:
>> Stelle Deine Datenbank auf UTF-8 um in löse Dich von dem mistigen
>> 8859-Krempel.
>>
>> Wenn Du durchgehend UTF-8 verwendest, dann hast Du auch in der DB keine
>> Probleme mit z.B. dänischen oder ganz kyrillischen Sonderzeichen. Und du
>> musst nichts mehr konvertieren, weil UTF-8 sowieso jeder Browser kann.
>
> Hallo,
>
> danke für den Tipp, aber das kann doch nicht die Lösung sein das ich dann
> Hyroglifen in der Datenbank stehen habe!

Hieroglyphen heißen die Dinger und wo ist der Unterschied, ob du Daten
vor dem Schreiben in die DB umwandelst oder beim Lesen?

Wobei man es präferieren sollte, Daten unmodifiziert zu schreiben.

Gruß, Frank

Re: Perl/MySQL Umlaute-Problem

am 26.07.2006 14:02:05 von Christian Kirsch

Joachim Böcker schrieb:
>> Stelle Deine Datenbank auf UTF-8 um in löse Dich von dem mistigen
>> 8859-Krempel.
>>
>> Wenn Du durchgehend UTF-8 verwendest, dann hast Du auch in der DB keine
>> Probleme mit z.B. dänischen oder ganz kyrillischen Sonderzeichen. Und du
>> musst nichts mehr konvertieren, weil UTF-8 sowieso jeder Browser kann.
>
> Hallo,
>
> danke für den Tipp, aber das kann doch nicht die Lösung sein das ich dann
> Hyroglifen in der Datenbank stehen habe!
>

Ob das "Hyroglyphen" sind oder nicht, hängt ausschließlich davon ab,
ob Deine Umgebung mit UTF-8 vernünftig umgeht oder nicht. Wenn Deine
Anwendungen ebenfalls in UTF-8 arbeiten und Du UTF-8-Fonts benutzt,
sieht ein ö auch aus wie ein ö.

Wenn Du allerdings kein UTF-8 *brauchst* (etwa weil Deine Texte
ohnehin nur als Westeuropa kommen), dann kannst Du auch mit Latin-1
arbeiten. Was dabei im Zusammenhang mit MySQL zu beachten ist, steht
in der Dokumentation unter dev.mysql.com/doc, Abteilung "Charsets and
collations". Außerdem wird das Thema in de.comp.datenbanken.mysql
regelmäßig angesprochen - Google sollte Dir weiterhelfen können.

Re: Perl/MySQL Umlaute-Problem

am 26.07.2006 14:14:40 von eck

Joachim Böcker schrub im Jahre 26.07.2006 13:47:

> danke für den Tipp, aber das kann doch nicht die Lösung sein das ich dann
> Hyroglifen in der Datenbank stehen habe!

Du hast keine Hiroglyphen in der DB stehen, sondern ordentliche,
standardkonformen Unicode. Auch nicht anders als ISO-8859-1

--
B.Eckstein, eck@ivu.de Cheap, Fast, Good - pick any two of them
Die FAQ zu de.comp.hardware.netzwerke: http://how.to/dchn
Mozilla-Tips: http://mozilla-anleitung.de/ http://www.holgermetzger.de/

Re: Perl/MySQL Umlaute-Problem

am 26.07.2006 15:25:10 von j-w-b

Danke für die vielen Tipps, habe eben das Problem gelöst mit:
$latin1 = Encode::encode( "iso-8859-1", $utf-8 );

Mein Fehler war das so machen zu wollen:
$latin1 = Encode::encode( "latin1", $utf-8 );


Gruß

Joachim

Re: Perl/MySQL Umlaute-Problem

am 27.07.2006 01:46:40 von Slaven Rezic

"Joachim Böcker" writes:

> Danke für die vielen Tipps, habe eben das Problem gelöst mit:
> $latin1 = Encode::encode( "iso-8859-1", $utf-8 );
>
> Mein Fehler war das so machen zu wollen:
> $latin1 = Encode::encode( "latin1", $utf-8 );
>

latin1 ist ein Alias für iso-8859-1, es sollte also beides gehen.

--
Slaven Rezic - slaven rezic de

Dump a Tk canvas as an xfig file:
http://search.cpan.org/search?mode=module&query=Tk::CanvasFi g