Perl/MySQL Problem mit Umlauten

Perl/MySQL Problem mit Umlauten

am 26.07.2006 11:55:47 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.

Wenn ich die character_sets auf UTF-8 oder Latin-1 stelle bringt keine
Änderungen.
Momentane Einstellung:
character_set_client latin1
character_set_connection latin1
character_set_database latin1
character_set_filesystem binary
character_set_results latin1
character_set_server latin1
character_set_system utf8
character_sets_dir
/usr/local/mysql-standard-5.0.22-linux-i686-glibc23/share/my sql/charsets/

Wäre echt toll wenn mir jemand auf die Sprünge helfen könnte.


Viele Grüße

Joachim

Re: Perl/MySQL Problem mit Umlauten

am 01.08.2006 17:37:06 von Axel Schwenke

"Joachim Böcker" wrote:
>
> 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.
>
> mysql-standard-5.0.22
> perl-DBD-mysql-2.9004

Dein DBD-mysql ist schon sehr gut abgehangen. Evtl. möchtest du mal
die Release-Notes eines aktuellen danach checken, ob da irgendwelche
Probleme bezüglich UTF8 und Encoding behoben wurden. AFAIK gab es da
ein paar Bugs in dieser Richtung.

Außerdem: welche Perl-Version ist das? Von 5.6.x zu 5.8.x hat sich
einiges in Perl bezüglich Unicode geändert. Ich hoffe, du hast auch
perluniintro und perlunicode gelesen? Und verstanden?

> 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.

Womit begründest du diese Aussage bezüglich "stehen in der Datenbank"?
Wie genau testest du das? Wie sind die entsprechenden Felder in der
Datenbank definiert (SHOW FULL FIELDS FROM

)? Stellen alle
verwendeten MySQL-Clients (also vermutlich der 'mysql' Kommandozeilen-
Client und diverse Perl-Skripte) konsistent das gleiche Client-Encoding
(charset_client, charset_results) ein? Hast du Abschnitt 10.4 des MySQL-
Manuals gelesen und verstanden?



> 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.

Das spricht dafür, daß der Fehler beim Mergen mit den externen Daten
auftritt. Protokolliere doch mal die INSERT und UPDATE-Statements,
die du an MySQL absetzt und schau nach, was drin steht.

Werde doch mal ein bisschen konkreter, was du machst. Notfalls als PM
aber besser geflaggt mit [OT:Perl] in dieser Newsgroup.


XL