• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[gelöst]mysql: LOAD DATA INFILE mit utf8

harvey

Member
Hallo,

ich habe eine kommaseparierte Datei, die ich gerne mit LOAD DATA INFILE nach mysql importieren möchte. Dabei gehen jedoch die utf8-kodierten Zeichen verloren, obwohl ich die entsprechende Tabelle mit DEFAULT CHARACTER SET utf8 erzeugt habe. Mit INSERT eingetragene Inhalte werden auch richtig dargestellt, nur die mit LOAD importierten eben nicht... :(

Edit: Bin inzwischen einen Schritt weiter: Die Darstellung klappt, wenn ich mysql wie folgt aufrufe:

Code:
mysql --default-character-set=utf8 -u root -p

Was aber immer noch nicht geht, ist die Unterscheidung zwischen a und ä im primary key-Feld. Hier werden duplizierte Einträge gemeldet. Eine Kommandozeilenoption --default-collation scheint es nicht zu geben.

Schön wäre auch, wenn ich default-character-set und default-collation schon beim startup jeweils auf utf8 setzen könnte...
 
OP
H

harvey

Member
panamajo schrieb:
SET NAMES 'utf8';
Das bewirkt leider immer noch nichts... :( Wenn meine csv-Datei so aussieht:

Code:
...
acht, achten
ächt, ächten
...

Dann erhalte ich beim Einlesen folgende Fehlermeldung:

Code:
ERROR 1062 (23000): Duplicate entry 'ächt' for key 1
 
OP
H

harvey

Member
whois schrieb:
Welche mysql Datenbank Version fährst du?
Welche Linux Distribution und Version?

Mysql=5.0.26-12
Linux=Suse 10.2 (oops, meine Signatur ist wohl bei dem Crash vor einigen Wochen auch verlorengegangen...)
 

whois

Ultimate Guru
Hmm

Error 1062 sagt nichts anderes als

Error: 1062 SQLSTATE: 23000 (ER_DUP_ENTRY)
Message: Duplicate entry '%s' for key %d
http://dev.mysql.com/doc/refman/5.0/en/connector-j-reference-error-sqlstates.html


Also doppelter Eintrag.
Mal sehen ob ich eventuellen einen Bug dazu finde.
Das was Panamajo geschrieben hat funktioniert bei anderen ohne Probleme.
 
OP
H

harvey

Member
Das Problem liegt wahrscheinlich hier:

Code:
mysql> show variables like 'c%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | latin1                     |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
| collation_connection     | utf8_general_ci            |
| collation_database       | utf8_general_ci            |
| collation_server         | latin1_swedish_ci          |
| completion_type          | 0                          |
| concurrent_insert        | 1                          |
| connect_timeout          | 5                          |
+--------------------------+----------------------------+
14 rows in set (0.02 sec)

Ohne die Kommandozeilenoption --default-character-set=utf8 steht hier nur bei character_set_system der Wert utf8, sonst überall latin1.

Wie ändere ich denn am besten das Startup so, dass überall statt latin1 utf8 steht?

Zusatz: Wenn ich von Hand die Werte ändere mit:
Code:
SET character_set_server=utf8;
SET collation_server=utf8_general_ci;
bleibt das Problem bestehen, aber das könnte auch daran liegen, dass der Server ja schon hochgefahren ist.
 
Oben