MySQL > 4.1 utf ISO etc - Nochmal für die Dummen bitte
Frank
- datenbank
Moin Moin,
mir flimmerts schon vor'm Auge, soviel hab ich gelesen,
aber verstanden hab ich nix :o(
Eigentlich ist mir auch völlig Wumpe, wie MySQL die Daten speichert,
hauptsache ich krieg sie ohne Tilde-A wieder raus.
Im Browser gab's noch nie Probleme, aber mit
$backup = "mysqldump --opt -c -full -h $dbhost -u $dbusr -p$dbpass $datab $table > table.sql";
gibt's nur Müll.
Als konkrete Fragen hätte ich:
1. Wie krieg ich mit PHP-MyAdmin wieder 'normale' 8859-1 Tabellen erstellt ?
1b. Wie krieg ich die vorhandenen Tabellen in 8859-1 konvertiert?
Wenn es zu 1-1b keine deutschsprachige Lektüre gibt:
2: Wie muss ich Daten speichern, damit ich sie vernünftig wieder raus kriege ?
( Einfach im Format Unicode UTF-8 ? Oder muss ich vorher noch wilde %C3%BC Umwandlungen o.ä. durchführen ? )
3. Wo passiert die Umwandlung überhaupt ?
Zerschiesst PHPMyAdmin die beim Hochladen oder ist das grundsätzlich beim Einlesen in MySQL ?
Ich brauch erstmal 'nen Kaffee ...
Danke Frank
hallo Frank,
Dein gestern abend begonnener Thread ist noch im Forum. Wenn du weitere Nachfragen hast, stelle sie bitte dort.
Grüße aus Berlin
Christoph S.
Moin Christoph S.,
Sorry, aber der Thread ist nicht von mir ...
War aber interessant.
Ich hatte nach Lesen gehofft, mit
Create Table (
xxx
) ENGINE=MyISAM DEFAULT CHARSET=ISO-8859-1 COMMENT='Kommentar';
oder
) ENGINE=MyISAM DEFAULT CHARSET=Latin-1 COMMENT='Kommentar';
weiterzukommen,
das war aber nix :o(
Könbntze ich auf die Art ein ISO-Table erstellen ?
Wenn ja, wie genau muss der DEFAULT CHARSET heissen ?
Gruss, Frank
P.s.: Eure Überwachungsengine ist noch nicht 100% ausgereift.
Der andere Thread ist echt nicht von mir ...
echo $begrüßung;
Create Table (
xxx
) ENGINE=MyISAM DEFAULT CHARSET=ISO-8859-1 COMMENT='Kommentar';
Könnte ich auf die Art ein ISO-Table erstellen ?
Ja, aber das ist nur die halbe Miete. Siehe https://forum.selfhtml.org/?t=136607&m=887317.
Bzw. nein. Es gibt keine Konstanten oder Befehlsteile für die Zeichensatznamen. Dinge, die keine Befehlsteile oder Datenbank-/Tabellen-/Spaltennamen sind, sind entweder Zahlen oder Strings. Letztere müssen als solche gekennzeichnet werden ('' oder "").
Wenn ja, wie genau muss der DEFAULT CHARSET heissen ?
Character Sets and Collations That MySQL Supports
echo "$verabschiedung $name";
Danke dedlfix
Wenn ja, wie genau muss der DEFAULT CHARSET heissen ?
MySQL's latin1 is the same as the Windows cp1252 character set. This means it is the same as the official ISO 8859-1 ...
Wenn ich das richtig verstehe, ist latin1 einfach nur der MySQL-Name für ISO-8859-1, wobei die Daten dann trotzdem weitergehend in utf8 codiert werden?
Hammer, ich komm da nicht mehr mit ...
Ich kann mir zwar grad noch merken, wann else if, elseif oder elsif angesagt ist,
aber langsam wird's wohl Zeit für die Gruft.
Die Compisachen werden imho immer komplizierter als einfacher :o(
Wie auch immer: Mit
$backup = "mysqldump --opt --default-character-set=utf8 -c -full -h $dbhost -u $dbusr -p$dbpass $datab $table > table.sql";
krieg ich die Daten wieder vernünftig raus und
Anzeigenmüll hab ich (noch) nicht.
Kann ich für's Erste mit leben :))
Danke, Frank
P.s.: Warum eigentlich kein Anzeigemüll, obwohl in jedem Html-Head (nur)
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
steht ?
echo $begrüßung;
MySQL's latin1 is the same as the Windows cp1252 character set. This means it is the same as the official ISO 8859-1 ...
Das stimmt nicht ganz. Es gibt da ein paar unwesentliche Unterschiede. (Na gut, das €-Zeichen ist auch hierzulande wichtig.)
Wenn ich das richtig verstehe, ist latin1 einfach nur der MySQL-Name für ISO-8859-1, wobei die Daten dann trotzdem weitergehend in utf8 codiert werden?
Der zweite Teil stimmt, der dritte stimmt nicht wirklich. UTF-8 ist nur im Bereich der Byte-Werte 00-7F kompatibel zu den ISO-8859-x-Kodierungen. Dieser Bereich entspricht dem ASCII. Deswegen ist er in beiden Kodierungen enthalten.
Wie auch immer: Mit
$backup = "mysqldump --opt --default-character-set=utf8 -c -full -h $dbhost -u $dbusr -p$dbpass $datab $table > table.sql";
krieg ich die Daten wieder vernünftig raus und
Wolltest du nicht ISO-8859-1/latin1 haben?
Anzeigenmüll hab ich (noch) nicht.
Anzeigemüll entsteht immer dann, wenn das anzeigende Programm nicht die richtige Kodierung gesagt bekommt. Das passiert eigentlich nur dann, wenn man die Daten falsch deklariert oder das anzeigende Programm mit einer bestimmten Kodierung nicht klarkommt.
P.s.: Warum eigentlich kein Anzeigemüll, obwohl in jedem Html-Head (nur)
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
steht ?
Hier verstehe ich den Zusammenhang nicht.
Diese Meta-Angabe ist nur eine Ersatz-Angabe, falls der gleichnamige HTTP-Header keine Angabe zur Zeichenkodierung macht. HTTP-Header lassen sich übrigens mit der livehttpheaders-Extension des Firefox anzeigen. Ähnliche Erweiterungen gibt es auch für andere Browser.
echo "$verabschiedung $name";
hi,
2: Wie muss ich Daten speichern, damit ich sie vernünftig wieder raus kriege ?
Nutze _überall_ die Kodierung, für die du dich entschieden hast.
Sollte das nicht gehen, überlege dir, an welchen Stellen und zu welchen Zeitpunkten du die Daten ggf. von einer Kodierung in eine andere umwandeln müsstest.
- Wo passiert die Umwandlung überhaupt ?
Zerschiesst PHPMyAdmin die beim Hochladen oder ist das grundsätzlich beim Einlesen in MySQL ?
Probleme entstehen da, wo die gewählte Kodierung nicht konsequent angewendet werden.
Das kann an vielen Stellen passieren.
dedlfix und Sven Rautenberg (u.a.) haben sich zu ähnlichen Themen schon des öfteren recht ausführlich geäußert, also empfehle ich die Benutzung der Archivsuche.
gruß,
wahsaga
echo $begrüßung;
Eigentlich ist mir auch völlig Wumpe, wie MySQL die Daten speichert,
hauptsache ich krieg sie ohne Tilde-A wieder raus.
MySQL speichert die Daten so, wie es in den Feld-Einstellungen festgelegt ist. Das muss dich theoretisch nur als Ersteller der Tabelle interessieren, denn davon hängt ab, welche Zeichen gespeichert werden können.
Als Anwender, der mit der DB nur CRUD[*] reden möchte, möchtest du deine Daten in einer bestimmten Kodierung senden und das Ergebnis ebenfalls in einer bestimmten Kodierung haben. Wenn dein Wunsch von den Server-Default-Einstellungen abweicht, solltest du dem DBMS mitteilen, welche Kodierung du verwendest. Das geht für beide Richtungen mit SET NAMES kodierung. Das Umwandeln in die und aus der Kodierung der einzelnen Felder übernimmt MySQL automatisch. Mit dieser Thematik beschäftigt sich das Handbuch-Kapitel Connection Character Sets and Collations.
Im Browser gab's noch nie Probleme, aber mit
$backup = "mysqldump --opt -c -full -h $dbhost -u $dbusr -p$dbpass $datab $table > table.sql";
gibt's nur Müll.
Ohne Angabe von --default-character-set=charset_name ist die Ausgabe von mysqldump UTF-8-kodiert. Dieser Wert kann auch bereits in irgendeiner der Konfigurationsdateien eingestellt sein.
Als konkrete Fragen hätte ich:
- Wie krieg ich mit PHP-MyAdmin wieder 'normale' 8859-1 Tabellen erstellt ?
Gute Frage, nächste Frage. Es ist mir noch nicht gelungen, herauszufinden, ob und wo man das konfigurieren kann, welche Kodierung beim Erzeugen der Export-Datei verwendet werden soll. Es gibt dafür keine auswählbare Option. Die Ausgabe ist immer UTF-8-kodiert. Beim Importieren kann man allerdings angeben, in welcher Kodierung die Eingabedatei vorliegt. Und dies sollte man auch tunlichst wahrheitsgemäß tun.
Du bist sicherlich nicht der erste, der dieses Export-Problem hat. Solltest du bei deinen Recherchen auf einen brauchbaren Hinweis stoßen, so lass es mich/uns bitte wissen.
1b. Wie krieg ich die vorhandenen Tabellen in 8859-1 konvertiert?
Beispielsweise mit einem Texteditor, in dem man die Datei als UTF-8 öffnet und als ISO-8859-1 (Ultraedit nennt das einfach ASCII) speichert.
2: Wie muss ich Daten speichern, damit ich sie vernünftig wieder raus kriege ?
( Einfach im Format Unicode UTF-8 ? Oder muss ich vorher noch wilde %C3%BC Umwandlungen o.ä. durchführen ? )
Keineswegs. Du musst dem Server nur deine Wünsche mitteilen (siehe oben, das SET-NAMES-Ding).
- Wo passiert die Umwandlung überhaupt ?
Siehe oben.
Zerschiesst PHPMyAdmin die beim Hochladen oder ist das grundsätzlich beim Einlesen in MySQL ?
Beim Importieren muss man die richtige Zeichenkodierung angeben, ansonsten macht phpMyAdmin eigentlich alles richtig.[**] Wenn du innherhalb von phpMyAdmin irgendwelchen Mist siehst, ist dieser erfahrungsgemäß nicht auf dem von phpMyAdmin gewachsen.
echo "$verabschiedung $name";
[*] CRUD = Create, Read, Update, Delete oder in SQL: INSERT, SELECT, UPDATE, DELETE
[**] Die Export-Geschichte ist kein Fehler, nur ein nicht vorhandenen Feature (bzw. eine noch nicht gefundene Konfigurationsmöglichkeit desselben).
Moin Moin,
vielleicht sollte ich mal ab und an meine alten Bookmarks aktualisieren :))
Wär ich statt in der 4er Referenz auch mal in der deutschen 5.1 Referenz gelandet,
hätt ichs vielleicht auch selber gefunden.
Wie auch immer:
Falls nochmal jemand wie ich fragt,
vielleicht hilfts ...
< http://dev.mysql.com/doc/refman/5.1/de/configure-options.html>
Grüsse, Frank