php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 28.03.2009, 19:18  
Neuer Benutzer
 
Benutzerbild von f4ckm5
 
Registriert seit: 28.03.2009
Beiträge: 5
f4ckm5 befindet sich auf einem aufstrebenden Ast
Standard MySQL Konsole und Umlaute unter Windows [LÖSUNG]

# ----------
# 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
Umlaute 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
f4ckm5 ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 28.03.2009, 22:29  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.654
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblick
dr.e. eine Nachricht über Skype™ schicken
Standard

Hört sich gut an. Soll die Lösung als php.de-WIKI-Artikel veröffentlicht werden?
__________________
Viele Grüße,
Dr.E.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Think about software design before you start to write code!
2. Discuss and review it together with experts!
3. Choose good tools (-> Adventure PHP Framework (APF))!
4. Write clean and reusable software only!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist offline   Mit Zitat antworten
Alt 28.03.2009, 23:54  
Neuer Benutzer
 
Benutzerbild von f4ckm5
 
Registriert seit: 28.03.2009
Beiträge: 5
f4ckm5 befindet sich auf einem aufstrebenden Ast
Standard

Es wäre schön, dies als Wiki-Artikel zu sehen.

Ich habe zusätzlich noch eine alternative Lösung recherchiert:

# ------------------
# Alternative Lösung
# ------------------

Wenn man die Codepage der Windows Eingabeaufforderung nicht ändern möchte, so kann man alternativ auch den Zeichensatz der MySQL Verbindung umschalten. Nach dem Verbinden zum MySQL Server setzt der Befehl "SET NAMES 'cp850';" den Verbindungszeichsatz auf MS-DOS 850 um oder man startet die MySQL Konsole mit dem Parameter "--default-character-set=cp850". "SHOW VARIABLES LIKE 'char%'; liefert nun folgendes:

mysql> show variables like 'char%';
+--------------------------+-----------------------------------------------------+
| Variable_name | Value |
+--------------------------+-----------------------------------------------------+
| character_set_client | cp850 |
| character_set_connection | cp850 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | cp850 |
| 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)


Anfragen und Ergebnisse werden nun vom MySQL Server in MS-DOS 850 erwartet und geliefert.
Nachteil: Generell findet in dieser Variante ein automatischer Ausgleich der Verschiebungen zwischen cp850 und latin1 statt. Es stehen aber nicht alle Zeichen auf beiden Seiten zur Verfügung, die der deutsche Anwender gewöhnt ist. Das Eurozeichen z.B. wird in cp850 nicht unterstützt und bei der Konvertierung durch ein Fragezeichen ersetzt. Beim Arbeiten mit latin1 ist diese Variante also etwas "hässlicher".

Mit freundlichen Grüßen

f4ckm5

Geändert von f4ckm5 (29.03.2009 um 00:33 Uhr).
f4ckm5 ist offline   Mit Zitat antworten
Alt 29.03.2009, 16:25  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.654
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblick
dr.e. eine Nachricht über Skype™ schicken
Standard

Hallo,

dann werde ich das mit deinem Einverständis als Artikel veröffentlichen. Danke für deine Arbeit.

//EDIT: Beitrag findet sich nun unter http://www.php.de/wiki-php/index.php..._unter_Windows

Viele Grüße,
Dr.E.
__________________
Viele Grüße,
Dr.E.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Think about software design before you start to write code!
2. Discuss and review it together with experts!
3. Choose good tools (-> Adventure PHP Framework (APF))!
4. Write clean and reusable software only!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Geändert von dr.e. (29.03.2009 um 16:34 Uhr). Grund: Link auf Beitrag eingefügt
dr.e. ist offline   Mit Zitat antworten
Alt 29.03.2009, 16:26  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

@Doc: Nimm ruhig die Tutorial Vorlage als Start.. : Autoren:Vorlage:Tutorial - PHP.de Wiki
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline   Mit Zitat antworten
Alt 29.03.2009, 16:35  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.654
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblick
dr.e. eine Nachricht über Skype™ schicken
Standard

Hab ich's richtig eingestellt?
__________________
Viele Grüße,
Dr.E.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Think about software design before you start to write code!
2. Discuss and review it together with experts!
3. Choose good tools (-> Adventure PHP Framework (APF))!
4. Write clean and reusable software only!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist offline   Mit Zitat antworten
Alt 29.03.2009, 16:40  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Ja. Es sei denn, f4ckm5 möchte namentlich genannt werden. Dann würde ich ein Tutorial: Namespace vergeben.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline   Mit Zitat antworten
Alt 30.03.2009, 22:04  
Neuer Benutzer
 
Benutzerbild von f4ckm5
 
Registriert seit: 28.03.2009
Beiträge: 5
f4ckm5 befindet sich auf einem aufstrebenden Ast
Standard

Find ich gut so.
Kann man die Einrückung der senkrechten Striche | der MySQL Tabellenausgaben in den Codebereichen nach rechts noch korrigieren?
Nur so für die Optik...

Ansonsten hab ich den Artikel auch in diversen Mailinglisten und Newsgroups hinterlassen, die Fragen zu diesem Thema enthielten. Hauptsache die Leute finden endlich mal Infos zu dieser Umlautgeschichte. Als Anfänger stößt fast jeder auf das Problem, aber bis dato waren kaum brauchbare Lösungen im Inet zu finden. Es hat mich selbst jahrelang "gequält", bis ich durch nähere Beschäftigung mit UTF-8 und einigen Zufällen darauf gekommen bin.
f4ckm5 ist offline   Mit Zitat antworten
Alt 30.03.2009, 22:10  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

chcp 1252 ist generell ein guter Tipp für MS Batching. Auch was Arbeiten im Filesystem u.ä. anbelangt (bspw. liste alle mp3s und leite die Ausgabe in eine Textdatei um - und erzeuge dabei korrekt Umlaute und Sonderzeichen). Habe ich schon oft gebraucht.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Umlaute und MySQL4.1 Datenbanken 2 15.11.2009 15:28
[Erledigt] Mysql - UTF-8 PHP 7Style PHP Tipps 2008 2 20.07.2008 00:48
[Erledigt] Mysql 4.1.x unter php 4.3.9 Datenbanken 3 15.11.2005 13:49
Schnittstelle zwischen PHP und MySQL klappt net !!! Datenbanken 16 16.10.2005 14:24
[Erledigt] not allowed to connect to this MySQL server PHP Tipps 2005-2 2 23.09.2005 18:34
[Erledigt] Umlaute in MySQL Datenbanken 1 21.08.2005 20:00
Suche Tipps für Persormance-Steigerung (Geld für Nützliches) Beitragsarchiv 18 16.08.2005 10:57
MYSQL läuft nur wenn /tmp auf 777 Datenbanken 5 06.07.2005 08:38
mysql root passwort vergessen Datenbanken 1 29.05.2005 11:33
procmailrc - php-script - MySQL - umlaute mit TXT PHP-Fortgeschrittene 7 25.02.2005 11:41
MYSQL trägt keine deutschen Umlaute ein. sharky PHP Tipps 2004-2 12 14.12.2004 08:00
Access denied for user: '@localhost' / SYSTEM@localhost Datenbanken 0 10.11.2004 20:35
MySQL Umlaute werden in PHP nicht richtig angezeigt PHP Tipps 2004 5 25.10.2004 20:36
MySQl akzeptiert keine Umlaute :( Datenbanken 6 20.08.2004 13:58
[Erledigt] PHP5 &a m p; MySQL Datenbanken 5 01.08.2004 05:47

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
windows konsole umlaute, windows console umlaute, mysql konsole windows, mysql charset ändern windows 7, mysql konsole zeichensatz, mysql windows konsole, mysql console umlaute, windows console charset, ü in console, mysql console windows, windows console zeichensatz, windows konsole zeichensatz, http://www.php.de/datenbanken/53482-mysql-konsole-und-umlaute-unter-windows-lss-sung.html, windows mysql konsole, umlaute in console, umlaute console, windows konsole sonderzeichen, php console umlaute, mysql console charset, sonderzeichen windows

Alle Zeitangaben in WEZ +2. Es ist jetzt 07:37 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum