Hallo,
ein paar Korrekturen gibt es hier von mir:
Unter Windows in der CLI ist stets CP850 einzustellen.
Da der Text via Email zuviel wurde, habe ich über das ganze Thema mit
anschaulichen Beispielen und tieferen Erläuterungen mal geblogt:
http://www.miracee.org/2009/03/30/encoding-handling-mysql-cli-5858398/
Der Link zu den Folien aus meinem University Vortrag ist ebenfalls am
Ende des Blogs zu finde.
Susanne
f4ckm5@stripped schrieb:
> # ----------------
> # Problem:
> # ----------------
>
> Wenn man die MySQL Konsole über die Eingabeaufforderung (cmd.exe) von
> Windows aufruft und deutsche Umlaute per INSERT oder UPDATE in
> Tabellen einfügt, so werden diese bei Abruf über die MySQL Konsole
> zwar korrekt ausgegeben , aber beim Zugriff mit anderen
> Datenbank-Clients (z.B. Ausgabe per PHP in eine Webseite) erscheinen
> statt der Umlaut andere Sonderzeichen statt einem "Ü" z.B. "š".
>
> # ----------------
> # Ursache:
> # ----------------
>
> Die Standardeinstellung für den Zeichensatz auf der Clientseite (MySQL
> Konsole) und auf der Serverseite ist unter Windows bei einer
> Standardinstallation des MySQL Servers "latin1". Die aktuellen werte
> einer Clientverbindung lassen sich mit "show variables like 'char%';"
> abfragen. Das Ergebnis ähnelt i.d.R. diesem:
>
> mysql> show variables like 'char%';
> +--------------------------+-----------------------------------------------------+
>
> | Variable_name | Value |
> +--------------------------+-----------------------------------------------------+
>
> | 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 | utf8 |
> | character_sets_dir | C:\Programme\MySQL\MySQL Server
> 5.1\share\charsets\ |
> +--------------------------+-----------------------------------------------------+
>
> 8 rows in set (0.00 sec)
>
> Der MySQL Zeichensatz "latin1" entspricht im Grobem dem Zeichensatz
> Windows-1252 bzw. ISO/IEC 8859-1.
> Windows verwendet aber für die Eingabeaufforderung (cmd.exe)
> standardmäßig nicht die Codepage Windows-1252, sondern MS-DOS 850.
> Drücke ich mit CodePage 850 das "Ü", so wird dieses vom Zahlenwert her
> als (dec)154 interpretiert und auf der Konsole auch als "Ü" angezeigt.
> MySQL speichert dieses "Ü" dann als ein Byte mit dem Wert (dec)154 in
> der Datenbank. Übersetzt nach Windows-1252 bzw. latin1 bedeutet
> (dec)154 aber "š". Wenn ich umgekehrt z.B. von einem PHP Formular aus
> ein "ü" eingebe, so wird dies als (dec)252 in der Datenbank
> gespeichert, bedeutet aber in der Zeichentabelle MS-DOS 850 "³". D.h.
> die Umlaute, die ich über einen Client eingebe, sind bei Abruf über
> den selben Weg immer korrekt, aber bei Abruf über den anderen immer
> falsch.
>
> # ----------------
> # Lösung:
> # ----------------
>
> Über den Befehl "chcp" (kurz für Change Codepage) kann man die
> Codepage für die Kommandozeile ändern. Ein einfaches "chcp 1252"
> schaltet die cmd.exe auf Windows-1252 bzw. latin1 um. Tippe ich jetzt
> ein "ü" erscheint bei Verwendung der Rasterschrift für das
> Konsolenfenster ein "³". Man kann die Schriftart für das
> Konsolenfenster aber auf "Lucida Console" umstellen, die auch
> Windows-1252 beherrscht, und erhält dann wieder ein "ü" angezeigt.
> Rufe ich danach die MySQL Konsole auf, werden die eingegebenen Umlaute
> von der Eingabeaufforderung als die Zahlenwerte an MySQL
> weitergereicht, die im Rahmen der Clienteinstellung latin1 erwartet
> werden.
> Man kann sich auch eine Verknüpfung bauen, die die Codepage vor dem
> Aufruf der MySQL Konsole automatisch umschaltet. Deren Ziel sähe dann
> in etwa so aus:
>
> C:\WINDOWS\system32\cmd.exe /c chcp 1252 && "C:\Programme\MySQL\MySQL
> Server 5.1\bin\mysql.exe" -uuser -ppasswort
>
> Mit freundlichen Grüßen
>
> Jürgen Schmitts
>
--
Sun Microsystems GmbH
Dipl.-Inf. Susanne Ebrecht, Support Engineer
52066 Aachen, Germany
http://www.sun.com
Registered Office: Sonnenallee 1, D-85551 Kirchheim-Heimstetten
Commercial register of the Local Court of Munich: HRB 161028
Managing Directors: Thomas Schroeder, Wolfgang Engels, Dr. Roland Boemer
Chairman of the Supervisory Board: Martin Haering