hawkmaster: Export mit PhpMyAdmin Probleme mit Umlauten??

Hallo zusammen,

ich exportiere mit PhpMyAdmin eine Tabelle einer MySQL Datenbank.
In einer Spalte (Location) der Tabelle steht z.b. das Wort "Büro".
Nach dem Export steht nun in der SQL Datei das Wort "Büro".

Ich habe nun versucht beim Import mal mit Zeichensatz UTF8 mal mit Latin1 zu arbeiten.
Es steht nie mehr "Büro" drin.
Wie kann man das korrekt erledigen?
Beim export kann man ja kein Zeichensatz angeben.

vielen Dank und viele Grüße
hawk

  1. Welchen zeichensatz verwendest du bei deiner Datenbank (Voreinstellung) und mit welchem Programm (Editor) öffnest du die Datei wenn du sie Exportiert hast?

    1. Hallo,
      vielen Dank für deine Hilfe

      ,»» Welchen zeichensatz verwendest du bei deiner Datenbank (Voreinstellung) und mit welchem Programm (Editor) öffnest du die Datei wenn du sie Exportiert hast?

      Also alle tabellen und auch die betreffende Spalte hat die Kollation "latin1_swedish_ci".
      Ich öffne die Dateien mit dem Editor "Textpad".

      vielen Dank und viele Grüße
      hawk

  2. echo $begrüßung;

    ich exportiere mit PhpMyAdmin eine Tabelle einer MySQL Datenbank.
    In einer Spalte (Location) der Tabelle steht z.b. das Wort "Büro".
    Nach dem Export steht nun in der SQL Datei das Wort "Büro".

    Wie etwas aussieht ist immer abhängig von der verwendeten Dekodierung. Öffne die Datei im Browser und stelle im Menü Ansicht die Zeichenkodierung auf ISO-8859-1 und UTF-8, dann wirst du sehen, dass einmal dieses und einmal jenes "drinsteht". Was wirklich ist kann im Zweifel nur ein Hex-Dump zeigen.

    Ich habe nun versucht beim Import mal mit Zeichensatz UTF8 mal mit Latin1 zu arbeiten.
    Es steht nie mehr "Büro" drin.

    Was steht dann drin? Bzw. mit welcher Verbindungskodierung abgefragt und mit welcher Kodierung angezeigt kommt konkret was zustande? Oder auch: Mit welchem Tool abgefragt? phpMyAdmin?

    Wie kann man das korrekt erledigen?
    Beim export kann man ja kein Zeichensatz angeben.

    Der ist in neueren Versionen immer UTF-8 (meiner Erfahrung nach).

    echo "$verabschiedung $name";

    1. Hallo dedlfix,
      vielen Dank für deine Hilfe,
      also ich bin mittlerweile total durcheinander.

      Ich versuche schon den ganzen Morgen verschiedene sachen.
      Folgendes.
      Alle Tabellen und Spalten sind "latin1_swedish_c".
      Ich exportiere Tabelle1 mit PhpMyAdmin wo auch Umlaute drin sind.
      Dann öffne ich diese mit dem Editor textpad. Hier ist alles wie in der Datenbank, also Ü belibt Ü und Ä bleibt Ä.
      Jetzt gleiches Spiel mit Tabelle 2 und jetzt wird plötzlich aus "Büro" => "Büro".
      Wieso ist das so unterschiedlich?

      Ich muss mich allerding in einem Punkt korriegieren.
      Wenn ich nun diese SQL Datei wo "Büro" drinsteht wieder mit PhPMyAdmin importiere und auch damit anschaue, ist alles wieder ok also "Büro".

      Mein Problem ist: Ich versuche mit einem eigenen Script wieder zu importieren.

      ich mache es so was eigentlich funktioniert:

      $file = "export.sql";
      if ($file!="") {
      $filename = $file;
      $file=fread(fopen($path.$file, "r"), 10485760);
      $query=explode(";\n",$file);
      for ($i=0;$i < count($query)-1;$i++) {
      echo "NOW UPDATING <br />";
      $sql_checkpaper = $DBO->query($query[$i]);
      }
      echo "<b>$filename <br /><br />successfully restored!</b>";
      }

      ich habe nun versucht den Header auch mit UTF8 einzustellen.
      header('Content-Type: text/html; charset=utf8');

      Trotzdem wird auf diese Weise immer "Büro" reingeschrieben.

      vielen Dank und viele Grüße
      hawk

      1. echo $begrüßung;

        Ich versuche schon den ganzen Morgen verschiedene sachen.

        Du musst penibel für jeden Schritt beachten, in welcher Kodierung die ankommenden Daten vorliegen und in welcher sie vorliegen müssen, wenn du sie weitergibst.

        Alle Tabellen und Spalten sind "latin1_swedish_c".

        Die Tabelleneinstellung ist bei bestehenden Feldern komplett uninteressant. Es zählt immer nur die für das Feld eingestellte Kodierung.

        Bei jeder Kommunikation mit dem MySQL-Server kommt noch hinzu, dass der Client sich für seine Verbindung eine definierte Kodierung aushandelt. Für den Client interessiert letzlich nur diese ausgehandelte Verbindungskodierung. Wenn Verbindungskodierung und Feldkodierung unterschiedlich sind, übersetzt der MySQL-Server selbständig zwischen ihnen. Das geht nur prinzipbedingt nicht verlustfrei zwischen allen Kodierungen.

        Ich exportiere Tabelle1 mit PhpMyAdmin wo auch Umlaute drin sind.

        UTF-8, weil es phpMyAdmin per Voreinstellung nicht anders macht. Eben fand ich noch die Einstellung $cfg['AllowAnywhereRecoding']. Wenn diese auf true steht (default: false), und die iconv- oder recode-Erweiterung in PHP zur Verfügung steht, kann man beim Export auch die gewünschte Kodierung angeben.

        Dann öffne ich diese mit dem Editor textpad. Hier ist alles wie in der Datenbank, also Ü belibt Ü und Ä bleibt Ä.

        Mit welcher Kodierung wir die Datei interpretiert?

        Jetzt gleiches Spiel mit Tabelle 2 und jetzt wird plötzlich aus "Büro" => "Büro".

        Mit welcher Kodierung wir die Datei interpretiert?

        Wieso ist das so unterschiedlich?

        Weil vielleicht eine automatische Kodierungserkennung nicht richtig arbeitet. Prinzipbedingt kann solch eine Erkennung nicht in jedem Fall korrekt arbeiten.

        Ein System, das eine Ausgabe erzeugt, muss die ankommenden Informationen auswerten, um dann das jeweils entsprechende Zeichen herauszusuchen, um es anzuzeigen. Je nachdem, wie es dabei die ankommenden Bytes interpretiert sieht die Anzeige aus. Bei fehlerhafter _Darstellung_ ist zunächst zu ergründen, wie der Darsteller die Daten interpretiert hat.

        Ich muss mich allerding in einem Punkt korriegieren.
        Wenn ich nun diese SQL Datei wo "Büro" drinsteht wieder mit PhPMyAdmin importiere und auch damit anschaue, ist alles wieder ok also "Büro".

        Welche Kodierung wurde beim Importieren angegeben? Ich nehme UTF-8 an.

        Mein Problem ist: Ich versuche mit einem eigenen Script wieder zu importieren.

        Hat sich das Script eine passende Verbindungskodierung ausgehandelt?

        ich habe nun versucht den Header auch mit UTF8 einzustellen.
        header('Content-Type: text/html; charset=utf8');

        Der sagt dem Browser, in welcher Kodierung du ihm die Daten sendest. Für die Kommunikation mit MySQL hat dieser Wert keine Bedeutung.

        Trotzdem wird auf diese Weise immer "Büro" reingeschrieben.

        Auf welche Kodierung hat sich der Browser eingestellt? Was ist im Menü Ansicht unter (Zeichen-)Kodierung angehakt?
        Zusatzfrage: Was wird dargestellt, wenn ISO-8859-1 gewählt wird? Das ist eine 1-Byte-gleich-1-Zeichen-Kodierung. Hier sieht man noch am ehesten, welche Bytefolge gesendet wurde.

        Und nochmal zur Wiederholung mein einleitender Satz, weil er bei der Kommunikation zwischen verschiedenen Prozessen wichtig ist:

        Du musst penibel für jeden Schritt beachten, in welcher Kodierung die ankommenden Daten vorliegen und in welcher sie vorliegen müssen, wenn du sie weitergibst.

        echo "$verabschiedung $name";

        1. Hallo dedlfix,

          danke nochmas für die Tipps.
          Ich muss da nochmals ein wenig ausprobieren.

          vielen Dank und viele Grüße
          hawk