LOAD DATA, Umlaute und utf8 - schaffe ich nicht!

LOAD DATA, Umlaute und utf8 - schaffe ich nicht!

am 14.03.2006 14:13:40 von Jo

Vielleicht treibt es den einen oder anderen bereits zum Wahnsinn mit
Umlaut-bezogenen Problemen und keiner kann es mehr hören. Aber ich
verzweifle mittlerweile an der folgenden Situation:

Problem:
--------
Es sollen Daten aus MS Excel 2003 in eine MySQL Tabelle geladen werden.
Dazu erstelle ich aus Excel-heraus eine csv-Datei. Damit wird dann mit
einem Ladescript die Tabelle erzeugt. Klappt alles wunderbar, so lange
ich keine Umlaute in den Daten habe. Mit dem ersten Umlaut innerhalb
eines Feldes wird der Rest des Feldes (einschl. Umlaut) abgeschnitten -
wird also wie ein field-delimiter behandelt.

Anmerkung: Aufgrund bestehender Anforderungen soll die Datenbank
einschl. Tabellen, etc. in utf8 gehalten werden.

Was mache ich falsch, bzw. was muss ich zusätzlich tun???

Umgebung:
---------
Windows XP
MySQL 5.0.18-nt
SHOW VARIABLES zeigt, dass alle character_set_*-related Variablen auf
utf8 gesetzt sind

Mein Testladescript sieht folgendermassen aus:
----------------------------------------------
DROP TABLE IF EXISTS tst;
CREATE TABLE tst
(
f1 char (10),
f2 char (10)
)
ENGINE =3D MyISAM;
LOAD DATA INFILE 'c:/temp/tst.csv'
INTO TABLE tst
FIELDS TERMINATED BY ';'
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
(
f1,
f2
)


Die Datei 'tst.csv' hat den folgenden Inhalt (1 Zeile):
-------------------------------------------------------
ue=ü;oe=ö

Nach dem Laden (ohne Fehler, ohne Warnings) hat die Tabelle folgenden
Inhalt:
------------------------------------------------------------ ---------------=
--
f1 f2
ue=3D oe=3D

Re: LOAD DATA, Umlaute und utf8 - schaffe ich nicht!

am 14.03.2006 15:14:13 von Axel Schwenke

"Jo" wrote:

> Es sollen Daten aus MS Excel 2003 in eine MySQL Tabelle geladen werden.
> Dazu erstelle ich aus Excel-heraus eine csv-Datei. Damit wird dann mit
> einem Ladescript die Tabelle erzeugt. Klappt alles wunderbar, so lange
> ich keine Umlaute in den Daten habe.
....

> Die Datei 'tst.csv' hat den folgenden Inhalt (1 Zeile):
> -------------------------------------------------------
> ueü;oeö
>
> Nach dem Laden (ohne Fehler, ohne Warnings) hat die Tabelle folgenden
> Inhalt:
> ------------------------------------------------------------ ---------------
> --
> f1 f2
> ue oe

Aus

"The character set indicated by the character_set_database system
variable is used to interpret the information in the file. SET NAMES
and the setting of character_set_client do not affect interpretation of
input."

Check das mal mit SHOW CREATE DATABASE ...


XL

Re: LOAD DATA, Umlaute und utf8 - schaffe ich nicht!

am 14.03.2006 16:05:28 von Jo

Axel Schwenke schrieb:

> "Jo" wrote:
>
> > Es sollen Daten aus MS Excel 2003 in eine MySQL Tabelle geladen werden.
> > Dazu erstelle ich aus Excel-heraus eine csv-Datei. Damit wird dann mit
> > einem Ladescript die Tabelle erzeugt. Klappt alles wunderbar, so lange
> > ich keine Umlaute in den Daten habe.
> ...
>
> > Die Datei 'tst.csv' hat den folgenden Inhalt (1 Zeile):
> > -------------------------------------------------------
> > ueü;oeö
> >
> > Nach dem Laden (ohne Fehler, ohne Warnings) hat die Tabelle folgenden
> > Inhalt:
> > ------------------------------------------------------------ -----------=
----
> > --
> > f1 f2
> > ue oe
>
> Aus
>
> "The character set indicated by the character_set_database system
> variable is used to interpret the information in the file. SET NAMES
> and the setting of character_set_client do not affect interpretation of
> input."
>
> Check das mal mit SHOW CREATE DATABASE ...
>
>
> XL

Danke Axel,
damit wird das Ganze zwar erklärlich, aber noch ärger. Denn das
refman sagt dazu aus:

Note that it is currently not possible to load data files that use the
ucs2 character set.

Weisst Du, was Windows bei csv-Dateien als char-set ausgibt? Ist das
latin1 oder ucs2?

Jo

Re: LOAD DATA, Umlaute und utf8 - schaffe ich nicht!

am 14.03.2006 17:46:59 von Sven Paulus

Jo wrote:
> Weisst Du, was Windows bei csv-Dateien als char-set ausgibt? Ist das
> latin1 oder ucs2?

UCS2 definitiv nicht. Das ist ein Zeichensatz, bei dem jedes Zeichen
aus zwei Bytes besteht, das kannst Du mit einem normalen Editor, der
nicht explizit UCS2-faehig ist, gar nicht lesen.
Im Zweifelsfall ist Dein Export in einem komischen CP850- oder
CP1232-Format.

Re: LOAD DATA, Umlaute und utf8 - schaffe ich nicht!

am 15.03.2006 09:20:15 von Axel Schwenke

"Jo" wrote:
> Axel Schwenke schrieb:

>> "The character set indicated by the character_set_database system
>> variable is used to interpret the information in the file. SET NAMES
>> and the setting of character_set_client do not affect interpretation of
>> input."
>>
>> Check das mal mit SHOW CREATE DATABASE ...

> damit wird das Ganze zwar erklärlich, aber noch ärger. Denn das
> refman sagt dazu aus:
>
> Note that it is currently not possible to load data files that use the
> ucs2 character set.
>
> Weisst Du, was Windows bei csv-Dateien als char-set ausgibt? Ist das
> latin1 oder ucs2?

Vermutlich UTF8. Kannst du dein ver***** Excel nicht anweisen, eine
bestimmte Codierung zu verwenden, wenn es sein CSV schreibt?

Sonst schau halt, ob du ein Windoze-Tool findest, das dir das Encoding
eines Files anzeigen oder besser noch, ändern kann.


XL

Re: LOAD DATA, Umlaute und utf8 - schaffe ich nicht!

am 15.03.2006 13:47:57 von Jo

Axel Schwenke schrieb:

> "Jo" wrote:
> > Axel Schwenke schrieb:
>
> >> "The character set indicated by the character_set_database system
> >> variable is used to interpret the information in the file. SET NAMES
> >> and the setting of character_set_client do not affect interpretation of
> >> input."
> >>
> >> Check das mal mit SHOW CREATE DATABASE ...
>
> > damit wird das Ganze zwar erklärlich, aber noch ärger. Denn das
> > refman sagt dazu aus:
> >
> > Note that it is currently not possible to load data files that use the
> > ucs2 character set.
> >
> > Weisst Du, was Windows bei csv-Dateien als char-set ausgibt? Ist das
> > latin1 oder ucs2?
>
> Vermutlich UTF8. Kannst du dein ver***** Excel nicht anweisen, eine
> bestimmte Codierung zu verwenden, wenn es sein CSV schreibt?
>
> Sonst schau halt, ob du ein Windoze-Tool findest, das dir das Encoding
> eines Files anzeigen oder besser noch, ändern kann.
>
>
> XL

Was mir weitergeholfen hat, ist die Tatsache, dass der
'character_set_database' mit dem zu ladenden charset identisch sein
muss. Windows scheint wohl latin1/cp1252 zu verwenden. Jedenfalls
klappt es damit. So ist anschliessend die DB zwar latin1, aber die
Kommunikation zum client und die client-Anwendung wie gefordert utf-8.
Gefällt mir zwar nicht so ganz, funktioniert aber.

Vielen Dank für Eure Antworten. Gruss - Jo