Dump einlesen - Umlaute gehen verloren!?

MySQL, PostgreSQL, SQLite
ragey
Posts: 14
Joined: 2006-02-10 21:47

Dump einlesen - Umlaute gehen verloren!?

Post by ragey » 2006-02-10 21:55

Hallo,
da ich mir nicht ganz sicher war wo das reinpassen könnte habe ich mal diese Kategorie gewählt.

Hallo,
ich möchte meine Seite auf einen anderen Server umziehen und habe nun die Datenbank exportiert. Anschließend habe ich die Datenbank am neuen Server eingelesen und musste Feststellen, das alle Umlaute wie ä, ö und ü verlorengeganen sind und stattdessen nur ? angezeigt wird.

Beim einlesen wird gefragt welchen Zeichnsatz das Dumpfile hat.
Was muss man dort angeben?

Zur Info, auf dem alten Server läuft:
MySQL 4.0.24_Debian-10sarge1
phpMyAdmin 2.6.2-Debian-3sarge1

Auf dem neuen Server läuft:
MySQL 4.1.10a
phpMyAdmin 2.6.3-pl1

Ach ja, wenn ich das Dumpfile öffne sind die Umlaute noch da,
soll heissen die Umlaute gehen beim einlesen verloren.

Wenn ich über eine Form etwas in die Datenbank (neuer Server)
schreibe werden die Umlaute normal verwendet.

Mfg Ragey

User avatar
isotopp
Posts: 471
Joined: 2003-08-21 10:21
Location: Berlin

Re: Dump einlesen - Umlaute gehen verloren!?

Post by isotopp » 2006-02-11 10:22

ragey wrote: Anschließend habe ich die Datenbank am neuen Server eingelesen und musste Feststellen, das alle Umlaute wie ä, ö und ü verlorengegangen sind und stattdessen nur ? angezeigt wird.
Welcher Zeichensatz im Dumpfile? "od -xa" - was wird für ein "ö" dort angezeigt?
Beim einlesen wird gefragt welchen Zeichnsatz das Dumpfile hat. Was muss man dort angeben?
Den Zeichensatz, der im Dumpfile verwendet wird.

SHOW VARIABLES LIKE "%char%" sagt was genau?

ragey
Posts: 14
Joined: 2006-02-10 21:47

Re: Dump einlesen - Umlaute gehen verloren!?

Post by ragey » 2006-02-11 10:47

Also ich kann in dem Dumpfile nichts finden was auf einen Zeichensatz hindeutet. Die Umlaute werden in dem File ganz normal angezeigt: ä ö ü Ã? Ã? Ã?


SHOW VARIABLES LIKE "%char%"

Auf dem alten Server angewandt:
character_set latin1
character_sets latin1 big5 cp1251 cp1257 croat czech danish dec8 ...
convert_character_set

Auf dem neuen Server angewandt:
character_set_client utf8
character_set_connection cp1250
character_set_database latin1
character_set_results utf8
character_set_server latin1
character_set_system utf8
character_sets_dir /usr/share/mysql/charsets/

Mfg Ragey

User avatar
isotopp
Posts: 471
Joined: 2003-08-21 10:21
Location: Berlin

Re: Dump einlesen - Umlaute gehen verloren!?

Post by isotopp » 2006-02-11 11:22

ragey wrote:Auf dem alten Server angewandt:
character_set latin1
Das sind Deine Umlaute - Du verwendest iso-8859-1 (latin1) im Dump.
Auf dem neuen Server angewandt:
character_set_client utf8
character_set_connection cp1250
character_set_database latin1
character_set_results utf8
character_set_server latin1
character_set_system utf8
character_sets_dir /usr/share/mysql/charsets/
Das ist ein wenig durcheinander, aber im Großen und Ganzen redest Du mit Deinem Server utf8, auch wenn der die Sachen intern als latin1 speichert. Dadurch werden Deine Umlaute kaputt konvertiert.

Code: Select all

SET NAMES utf8
setzt Deine Connection auf latin1. Du kannst das auch in die erste Zeile von Deinem Dump reinschrauben, wenn Du magst, oder an der Stelle, wo nach dem Character Set von Deinem Dump dies (oder iso-8859-1) angeben.

ragey
Posts: 14
Joined: 2006-02-10 21:47

Re: Dump einlesen - Umlaute gehen verloren!?

Post by ragey » 2006-02-11 11:53

Wo muss ich das hier eingeben: SET NAMES latin1 ?

Ich habe es im phpMYadmin unter SQL eingegeben und habe ein OK erhalten.
Wenn ich dann wieder die Abfrage mache sind dort die gleichen werte drin.

Mfg Ragey

User avatar
isotopp
Posts: 471
Joined: 2003-08-21 10:21
Location: Berlin

Re: Dump einlesen - Umlaute gehen verloren!?

Post by isotopp » 2006-02-11 11:57

ragey wrote:Wo muss ich das hier eingeben: SET NAMES latin1 ?
Logge Dich mit ssh als root auf Deinem Dedi ein, dafür ist er da. Verwende den MySQL Kommandozeilenclient. Dort gibst Du am "mysql>"-Prompt "SET NAMES latin1" ein, dann liest Du mit "source /pfad/zum/dump.sql" den Dump ein.

Und bitte schmeiße Deine "Administrationshilfen" wie Plesk, phpMyAdmin und anderes Zeugs weg. Sie behindern Dich nur dabei, Dinge zu lernen und zu verstehen.
Wenn ich dann wieder die Abfrage mache sind dort die gleichen werte drin.
Ja. Zwangsläufig. Würdest Du besser verstehen, wie phpMyAdmin, PHP und MySQL zusammenspielen, wäre Dir das klar.

ragey
Posts: 14
Joined: 2006-02-10 21:47

Re: Dump einlesen - Umlaute gehen verloren!?

Post by ragey » 2006-02-11 12:00

Ok Ok nur durch Fragen lernt man ok?
Trotzdem Danke.

User avatar
isotopp
Posts: 471
Joined: 2003-08-21 10:21
Location: Berlin

Re: Dump einlesen - Umlaute gehen verloren!?

Post by isotopp » 2006-02-11 12:06

ragey wrote:Ok Ok nur durch Fragen lernt man ok?
Trotzdem Danke.
Wenn Du vor dem "source", und nach dem "SET NAMES" einmal ein "SHOW VARIABLES LIKE '%char%'" machst, sollte dort nun überall "latin1" stehen. Bitte hier pasten.

ragey
Posts: 14
Joined: 2006-02-10 21:47

Re: Dump einlesen - Umlaute gehen verloren!?

Post by ragey » 2006-02-11 12:37

Hallo,
vielen Dank es hat funktioniert:

Code: Select all

+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | latin1                     |
| character_set_connection | latin1                     |
| character_set_database   | latin1                     |
| character_set_results    | latin1                     |
| character_set_server     | latin1                     |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
7 rows in set (0.00 sec)
Ich habe mich gerade durch einige Befehle gearbeitet
um das alles ein wenig besser zu verstehen.

Ich hatte zuvor bereits das SQL nochmal via myadmin hochgeladen
und als Zeichensatz latin1 ausgewählt.
Danach waren die Umlaute noch da :)

Danke Mfg Ragey

ragey
Posts: 14
Joined: 2006-02-10 21:47

Re: Dump einlesen - Umlaute gehen verloren!?

Post by ragey » 2006-02-11 12:47

Hoppla
gibt wohl doch noch eine unstimmigkeit,
und zwar hab ich das hier gemacht:

Code: Select all

mysql> g SHOW VARIABLES LIKE "%char%";
ERROR:
No query specified

+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | latin1                     |
| character_set_connection | latin1                     |
| character_set_database   | latin1                     |
| character_set_results    | latin1                     |
| character_set_server     | latin1                     |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
7 rows in set (0.00 sec)
Aber er wirft oben einen Fehler aus.
Desweiteren ist im PHPMyadmin noch alles beim alten!?

User avatar
isotopp
Posts: 471
Joined: 2003-08-21 10:21
Location: Berlin

Re: Dump einlesen - Umlaute gehen verloren!?

Post by isotopp » 2006-02-11 12:57

[quote="ragey"]

Code: Select all

mysql> g SHOW VARIABLES LIKE "%char%";
ERROR:
No query specified
...[/quote]

g und ; sind gleichbedeutend und beenden ein Statement. Das Ergebnis wird als Tabelle gedruckt.

G beendet ebenfalls ein Statement, das Ergebnis wird "vertikal" gedruckt.

[quote]Aber er wirft oben einen Fehler aus.
Desweiteren ist im PHPMyadmin noch alles beim alten!?[/quote]

SET NAMES setzt den Zeichensatz in Deiner Session, also in diesem Fall innerhalb Deiner Verbindung des MySQL Command Line Client. Verläßt Du diesen, beendet er Deine Session, und die nächste Session wird wieder mit dem normalen Zeichensatz angelegt.

phpMyAdmin baut mit jeder Seite (also nach jedem Kommando) eine neue Session auf, daher funktioniert SET NAMES dort nicht dauerhaft.

Du kannst in der [client] und in der [mysqld]-Sektion Deiner /etc/my.cnf (Debian: /etc/mysql/my.cnf) den gewünschten Systemzeichensatz eintragen. Du mußt dies an beiden Enden tun:

[code]
[client]
default-character-set = latin1

[mysqld]
default-character-set = latin1
Damit die Ã?nderung wirksam wird, mußt den MySQL Serverprozeß neu starten:

Code: Select all

root@localhost:~ # /etc/init.d/mysql stop
root@localhost:~ # /etc/init.d/mysql start
Danach sollte SHOW STATUS LIKE "%char%" automatisch alles als latin1 anzeigen (bis auf system, das ist immer utf8).

Beachte, daß bereits angelegte Datenbanken möglicherweise mit DEFAULT CHARACTER SET utf8 angelegt worden sind. "SHOW CREATE DATABASE <datenbankname>G" wird Dir das sagen.

mcfly
Posts: 92
Joined: 2005-09-20 17:10

Re: Dump einlesen - Umlaute gehen verloren!?

Post by mcfly » 2006-02-14 18:57

Hi leider habe ich das gleiche Problem und auch nach dem einfügen der beagten codezeilen klappt es nicht die datenbank mit umlauten einzufügen.

Ich habe die sicherung mit phpmyadmin erstellt und dort sind alle umlaute vorhanden egal welche datenbank ich nehme. Versuche ich diese aber mit bigdump wieder auf dem server einzuspielen sind alle umlaute weg.


Liegt das vielleicht an bigdump oder was mache ich falsch?


Wäre sehr über hilfen von euch erfreut.