Problem mit Zeichensatz
am 09.03.2007 11:34:19 von Thomas Barth
Hi,
es existieren zwei Rechner mit den gleichen Datenbanken. Gerade habe ich
noch einen mysqldump vom Remoterechner direkt in meine lokale Datenbank
gepipt. Es gibt eine Tabelle mit Texten, die natürlich Umlaute
enthalten. Wenn ich die Texte z.B. vom Remoterechner abrufe, bekomme ich
statt der Umlaute sehr sonderbare Zeichen geliefert. Wenn ich sie lokal
abrufe, werden die Umlaute als solche angezeigt, obwohl es sich ja um
eine Kopie der DB handelt.
Mein lokales System ist vollständig auf UTF-8 eingestellt.
local mysql> show variables;
character_set_client utf8
character_set_connection utf8
character_set_database utf8
character_set_filesystem binary
character_set_results utf8
character_set_server utf8
character_set_system utf8
character_sets_dir /usr/share/mysql/charsets/
collation_connection utf8_general_ci
collation_database utf8_general_ci
collation_server utf8_general_ci
Die DB auf dem Remoterechner hingegen auf latin1
remote mysql> show variables;
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 latin1
character_sets_dir /usr/share/mysql/charsets/
collation_connection latin1_swedish_ci
collation_database latin1_general_ci
collation_server latin1_general_ci
Kann ich jetzt nachträglich noch die remotedatenbank auf UTF-8 stellen?
Gruß,
Thomas
Re: Problem mit Zeichensatz
am 10.03.2007 12:40:38 von Kai Ruhnau
Thomas Barth wrote:
> Hi,
> es existieren zwei Rechner mit den gleichen Datenbanken. Gerade habe ich
> noch einen mysqldump vom Remoterechner direkt in meine lokale Datenbank
> gepipt. Es gibt eine Tabelle mit Texten, die natürlich Umlaute
> enthalten. Wenn ich die Texte z.B. vom Remoterechner abrufe, bekomme ich
> statt der Umlaute sehr sonderbare Zeichen geliefert. Wenn ich sie lokal
> abrufe, werden die Umlaute als solche angezeigt, obwohl es sich ja um
> eine Kopie der DB handelt.
Hinreichend neue Versionen (die Ausgabe von `show variables` deutet
darauf hin) dumpen die Daten in UTF-8 unabhängig von sonstigen
Einstellungen des Servers. Im Dump selber sind alle Informationen
enthalten, um ihn wiederherzustellen und zwar auch wieder unabhängig von
den Einstellungen des Zielservers (sofern der alles versteht).
Da du sagst, du hast einfach alles durchgepiped, kannst du davon
ausgehen, dass alle Daten intakt sind - sofern du keine exotischen
Optionen bei mysqldump gesetzt hast (zum Beispiel --opt aus(!)geschaltet
hattest).
> Mein lokales System ist vollständig auf UTF-8 eingestellt.
>
> local mysql> show variables;
> character_set_client utf8
^^^^
> character_set_connection utf8
^^^^
> character_set_database utf8
> character_set_filesystem binary
> character_set_results utf8
^^^^
> character_set_server utf8
> character_set_system utf8
> character_sets_dir /usr/share/mysql/charsets/
> collation_connection utf8_general_ci
> collation_database utf8_general_ci
> collation_server utf8_general_ci
Das heißt, der Client erwartet vom MySQL-Server die Daten in UTF-8 und
stellt sie so dar. Wenn hier die Darstellung der Zeichen stimmt, dann
erwartet auch deine Shell zur Anzeige die Daten in UTF-8.
> Die DB auf dem Remoterechner hingegen auf latin1
> remote mysql> show variables;
> 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 latin1
> character_sets_dir /usr/share/mysql/charsets/
> collation_connection latin1_swedish_ci
> collation_database latin1_general_ci
> collation_server latin1_general_ci
Wenn du mit diesen Verbindungseinstellungen aus dem gleichen (Anzeige-)
Client heraus arbeitest, dann wird das nichts, denn jetzt erwartet der
MySQL-Client vom Server latin1-Daten die er dann auch als solche
darstellt. Ist deine Shell weiterhin auf UTF-8 eingestellt , dann kann
sie latin1 nicht darstellen.
Grüße
Kai
--
This signature is left as an exercise for the reader.