[MySQL] Abfragen ob DB utf8 ist
miku
- datenbank
Hallo zusammen,
ich suche eine Möglichkeit zu erkennen ob eine Datenbank mit utf8 abgespeichert ist oder nicht. Gibt es hierzu einen Befehl?
Habe es mit folgendem Befehl auf utf8 umgestellt, jetzt will ich kontrollieren ob es auch wirklich richtig geändert wurde:
ALTER DATABASE testdb
DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
Danke und Grüße, miku
echo $begrüßung;
ich suche eine Möglichkeit zu erkennen ob eine Datenbank mit utf8 abgespeichert ist oder nicht. Gibt es hierzu einen Befehl?
Alle Informationen zu Datenbanken und Tabellen bekommst du mit SHOW und in den INFORMATION_SCHEMA Tables.
Habe es mit folgendem Befehl auf utf8 umgestellt, jetzt will ich kontrollieren ob es auch wirklich richtig geändert wurde:
Das bringt dir aber nicht viel, denn die Einstellung der Datenbank-Kodierung und -Kollation wirkt sich nur auf neu erstellte Tabellen aus. Die Konfiguration der Tabelle wiederum ist nur ein Default-Wert für neu erstellte Felder. Wenn du bestehende Felder und Tabellen ändern willst, musst du das für jedes und jede einzeln machen. Die Kodierung der vorhandenen Daten muss außerdem der bisher angegebenen Kodierung entsprechen, sonst kann die Konvertierung nicht problemlos erfolgen.
echo "$verabschiedung $name";
Alle Informationen zu Datenbanken und Tabellen bekommst du mit SHOW [..]
danke
Das bringt dir aber nicht viel, denn die Einstellung der Datenbank-Kodierung und -Kollation wirkt sich nur auf neu erstellte Tabellen aus. [...]
Das hab ich wie folgt gemacht:
ALTER TABLE tabletest
CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
Oder ist das nicht ausreichend und ich muss alles von Hand machen?
z.B.
ALTER TABLE 'tabletest' CHANGE 'feld1' 'feld2' int (11) [....] CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL;
grüße miku
echo $begrüßung;
Das bringt dir aber nicht viel, denn die Einstellung der Datenbank-Kodierung und -Kollation wirkt sich nur auf neu erstellte Tabellen aus. [...]
Das hab ich wie folgt gemacht:
ALTER TABLEtabletest
CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
Oder ist das nicht ausreichend und ich muss alles von Hand machen?
Das reicht. Kontrollausgaben sind immer gut und speziell hier kannst du ja hinterher kontrollieren, was für die einzelnen Felder für eine Kodierungskonfiguration angezeigt wird.
echo "$verabschiedung $name";
Leider habe ich immer noch das Problem dass mir Umlaute nicht richtig dargestellt werden wenn ich mit mysql den Inhalt einer Tabelle abfrage (ü wird als ³ dargestellt usw.)
Ich habe aber schon die Datenbank, die entsprechende Tabelle und sogar die Eingabeaufforderung (in der ich über mysql abfrage) testweise auf utf8 umgestellt.
Hab ich was vergessen bzw. hast du eine Idee an was es noch liegen kann?
Die html entities im Inhalt habe ich ebenfalls wieder durch normale Umlaute ersetzt aber der Fehler bleibt.
Danke und Grüße, miku
echo $begrüßung;
(ü wird als ³ dargestellt usw.)
Das ist ungewöhnlich. Wer weiß, was dir da in welcher Form kaputtgegangen ist.
Hab ich was vergessen bzw. hast du eine Idee an was es noch liegen kann?
Zwei Dinge sind wichtig: die Kodierung der Felder - die hast du ja schon eingestellt - und die Kodierung der Client-Verbindung. Letztere sollte man nach jedem Verbindungsaufbau (Connect) explizit einstellen. Dazu gibt es die MySQL-API-Funktion mysql_set_character_set() und diverse Pendants dazu in den Implementationen der Systeme (z.B. PHP: mysql[i]_set_charset()). Wenn es das nicht gibt, tut es für UTF-8 und ISO-8859-x/LatinX auch ein "SET NAMES"-Statement. Die Daten müssen dann natürlich UTF-8-kodiert zum DBMS gesendet werden und kommen auch so wieder zurück.
Das ist im Grunde schon ausreichend.
Nun kann es sein, dass durch dein bisheriges Nichtbeachten der Kodierungsgeschichte schon fehlerhafte Daten in deinen Tabellen stehen. Wenn der phpMyAdmin alles richtig anzeigt, ist mit den Daten alles in Ordnung. Wenn nicht, und auch der ü als ³ darstellt, sehe ich derzeit nur eine manuelle Korrektur als Lösung.
echo "$verabschiedung $name";
"SET NAMES"-Statement. Die Daten müssen dann natürlich UTF-8-kodiert zum DBMS gesendet werden und kommen auch so wieder zurück.
Danke, das hat mich auf den richtige Weg gebracht :) .
Die Daten waren korrekt in der Datenbank als utf8 gespeichert, allerdings war das Cmd Fenster nicht im Stande diese korrekt darzustellen obwohl ich anscheinend auf utf8 umgestellt hatte zeigte es mir Zeichen immer noch in latin an.
Hab die mysql Abfrage mit einem separaten Programm durchgeführt und siehe da, es werden hübsche Umlaute dargestellt :)
Vielen Dank für deine Hilfe. Grüße miku