Zerbröselte Sonderzeichen

Zerbröselte Sonderzeichen

am 06.09.2006 16:58:57 von Olav Rogall

Hallo!

Ich habe hier (vermutlich) ein kleines Problemchen, welches hier schon
mehrfach erörtert worden ist. Ich lese hier nur *sehr* sporadisch.


Gegeben sei folgendes: Linux mit Perl 5.8.8 und MySQL 4.1.21.

MySQL ist ein Eigencompilat:

../configure --prefix=/usr/local/mysql4 \
--enable-local-infile \
--with-charset=latin1 \
--with-collation=latin1_german1_ci \
--with-extra-charsets=all \

Ich habe folgendes vor:

Ich bekomme von einem Kunden XML-Dateien übertragen, die ich in eine DB
schieben will. Ausgelesen werden diese XML-Dateien mit Perl und dem
XML::Simple-Modul. Codiert ist die XML-Datei in UTF-8, da dort (es
handelt sich um Namen und Adressen) auch ausländische Namen drin
vorkommen können.

Wie man oben sieht, ist das Standard-Charset latin-1, diese habe ich
gelassen, da ich von einem bestehenden 3.23.x auf die 4.1.22 ein Update
gemacht habe. Es soll nur die neue (!) DB mit den Namen und Adressen (sie
ist unabhängig vom anderen Datenbestand) mit UTF-8 als Charset laufen.
Diese habe ich auch eingestellt.

Lese ich nun mit meinem Perl-Script die XML-Datei ein, habe ich korrekte
deutsche Umlaute und z.B. türkische Sonderzeichen. Ein print auf meinen
Insert-Befehl zeigt mir auch noch korrekte Sonderzeichen an. In der
MySQL-Tabelle sind diese aber nicht, sondern dort finde ich z.B. anstatt
eines "ß" (sz) ein "ß".



Was habe ich übersehen?


MfG...
...Olav


--

Re: Zerbröselte Sonderzeichen

am 06.09.2006 17:02:27 von Christian Kirsch

Olav Rogall schrieb:
> Hallo!
>
> Ich habe hier (vermutlich) ein kleines Problemchen, welches hier schon
> mehrfach erörtert worden ist. Ich lese hier nur *sehr* sporadisch.
>

Und Dein "Internet geht nicht", oder was hindert Dich daran, in
groups.google.com zu suchen?

>
> Gegeben sei folgendes: Linux mit Perl 5.8.8 und MySQL 4.1.21.
>
> MySQL ist ein Eigencompilat:
>
> ./configure --prefix=/usr/local/mysql4 \
> --enable-local-infile \
> --with-charset=latin1 \
> --with-collation=latin1_german1_ci \
> --with-extra-charsets=all \
>
> Ich habe folgendes vor:
>
> Ich bekomme von einem Kunden XML-Dateien übertragen, die ich in eine DB
> schieben will. Ausgelesen werden diese XML-Dateien mit Perl und dem
> XML::Simple-Modul. Codiert ist die XML-Datei in UTF-8, da dort (es
> handelt sich um Namen und Adressen) auch ausländische Namen drin
> vorkommen können.

.... und weil XML eigentlich (fast) immer UTF-8 ist.

>
> Wie man oben sieht, ist das Standard-Charset latin-1, diese habe ich
> gelassen, da ich von einem bestehenden 3.23.x auf die 4.1.22 ein Update
> gemacht habe. Es soll nur die neue (!) DB mit den Namen und Adressen (sie
> ist unabhängig vom anderen Datenbestand) mit UTF-8 als Charset laufen.
> Diese habe ich auch eingestellt.
>
> Lese ich nun mit meinem Perl-Script die XML-Datei ein, habe ich korrekte
> deutsche Umlaute und z.B. türkische Sonderzeichen. Ein print auf meinen
> Insert-Befehl zeigt mir auch noch korrekte Sonderzeichen an. In der
> MySQL-Tabelle sind diese aber nicht, sondern dort finde ich z.B. anstatt
> eines "ß" (sz) ein "Ã�".
>
> Was habe ich übersehen?
>
Dass Latin-1-Zeichen > 128 in UTF-8 mit zwei oder mehr Byte
dargestellt werden.

Was ist eigentlich Dein Problem?

Re: Zerbröselte Sonderzeichen

am 06.09.2006 17:04:14 von Christian Kirsch

Da wir schon über Sonderzeichen sprechen: Du würdest allen das Lesen
Deiner Postings erleichtern, wenn Du Deinem News-Client beibrächtest,
einen korrekten Content-Type-Header zu schicken.

Re: Zerbröselte Sonderzeichen

am 06.09.2006 23:24:51 von Axel Schwenke

Olav Rogall wrote:
>
> Ich habe hier (vermutlich) ein kleines Problemchen, welches hier schon
> mehrfach erörtert worden ist. Ich lese hier nur *sehr* sporadisch.

Wenn es denn hier schon erörtert wurde - inwiefern unterscheidet sich
dein *konkretes* Problem von den vorigen?

> Gegeben sei folgendes: Linux mit Perl 5.8.8 und MySQL 4.1.21.
>
> MySQL ist ein Eigencompilat:
>
> ./configure --prefix=/usr/local/mysql4 \
> --enable-local-infile \
> --with-charset=latin1 \
> --with-collation=latin1_german1_ci \
> --with-extra-charsets=all \

Default-Charset und -Collation hättest du auch in my.cnf einstellen
können.

> Wie man oben sieht, ist das Standard-Charset latin-1, diese habe ich
> gelassen, da ich von einem bestehenden 3.23.x auf die 4.1.22 ein Update
> gemacht habe. Es soll nur die neue (!) DB mit den Namen und Adressen (sie
> ist unabhängig vom anderen Datenbestand) mit UTF-8 als Charset laufen.
> Diese habe ich auch eingestellt.

Nicht Prosa, Details! Meine Glaskugel zeigt mir, daß du für die
zugehörige Datenbank den Default-Charset auf UTF8 gestellt hast.
M.a.W. du hast MySQL angewiesen, die Daten als UTF8 zu *speichern*.
Das ist schon mal die halbe Miete.

> Lese ich nun mit meinem Perl-Script die XML-Datei ein, habe ich korrekte
> deutsche Umlaute und z.B. türkische Sonderzeichen. Ein print auf meinen
> Insert-Befehl zeigt mir auch noch korrekte Sonderzeichen an.

Das belegt erstmal nur, daß dein Terminal die UTF8-Sequenzen korrekt
interpretiert. Hast du deinem MySQL aber auch verklickert, daß du Daten
in UTF8 *anlieferst*? M.a.W. hast du
http://dev.mysql.com/doc/refman/4.1/en/charset-connection.ht ml
gelesen und verinnerlicht?

> In der
> MySQL-Tabelle sind diese aber nicht, sondern dort finde ich z.B. anstatt
> eines "ß" (sz) ein "ß".

Dann sind die Daten entweder beim Schreiben in die Datenbank oder beim
Auslesen aus derselben einmal zuviel oder zuwenig konvertiert worden.

Genaueres könnte man sagen, wenn man wüßte wie *genau* du die Daten aus
der Datenbank gelesen und dargestellt hast.


XL

Re: Zerbröselte Sonderzeichen

am 07.09.2006 08:15:37 von Olav Rogall

Axel Schwenke wrote in
news:3bende.65v.ln@xl.homelinux.org:

>> Ich habe hier (vermutlich) ein kleines Problemchen, welches hier
>> schon mehrfach erörtert worden ist. Ich lese hier nur *sehr*
>> sporadisch.
>
> Wenn es denn hier schon erörtert wurde - inwiefern unterscheidet sich
> dein *konkretes* Problem von den vorigen?

Ich schrieb doch oben "vermutlich", da ich wohl nicht der erste mit
dieser Problematik bin. ,-)

>> Wie man oben sieht, ist das Standard-Charset latin-1, diese habe ich
>> gelassen, da ich von einem bestehenden 3.23.x auf die 4.1.22 ein
>> Update gemacht habe. Es soll nur die neue (!) DB mit den Namen und
>> Adressen (sie ist unabhängig vom anderen Datenbestand) mit UTF-8 als
>> Charset laufen. Diese habe ich auch eingestellt.
>
> Nicht Prosa, Details! Meine Glaskugel zeigt mir, daß du für die
> zugehörige Datenbank den Default-Charset auf UTF8 gestellt hast.
> M.a.W. du hast MySQL angewiesen, die Daten als UTF8 zu *speichern*.
> Das ist schon mal die halbe Miete.

Ja, genau das will ich ja auch so.

>> Lese ich nun mit meinem Perl-Script die XML-Datei ein, habe ich
>> korrekte deutsche Umlaute und z.B. türkische Sonderzeichen. Ein print
>> auf meinen Insert-Befehl zeigt mir auch noch korrekte Sonderzeichen
>> an.
>
> Das belegt erstmal nur, daß dein Terminal die UTF8-Sequenzen korrekt
> interpretiert. Hast du deinem MySQL aber auch verklickert, daß du
> Daten in UTF8 *anlieferst*? M.a.W. hast du
> http://dev.mysql.com/doc/refman/4.1/en/charset-connection.ht ml
> gelesen und verinnerlicht?

Ja, jetzt wieder einmal. Dieses mal habe ich aber SET
CHARACTER_SET_CLIENT = UTF8 nicht "überlesen".

Das war's.


MfG...
...Olav
--