Taney: Eine SQL Datei richtig aufspielen

Hallo liebes Forum
Ich habe eine vorhandene Datenbank und müsste eine sql Datei aufspielen. Dumpen geht leider nicht, da sonst nur die Datei übernommen wird. (Wahrscheinlich?)
Wenn ich das über phpmyAdmin importiere, bricht er jedesmal ab, da die Datei zu groß ist. (3.8MB)
Hätte jemand einen Vorschlag, wie ich das am besten aufspiele?

Leider hat er die Umlaute auch total komisch übernommen (Berghülen)
Grüße

  1. Hätte jemand einen Vorschlag, wie ich das am besten aufspiele?

    Du kannst die Datei mit einem normalen Texteditor in Teile aufteilen, und diese separat aufspielen.

  2. echo $begrüßung;

    Wenn ich das über phpmyAdmin importiere, bricht er jedesmal ab, da die Datei zu groß ist. (3.8MB)

    So ein Dump lässt sich an den Befehlsgrenzen teilen.

    Leider hat er die Umlaute auch total komisch übernommen (Berghülen)

    Der Dump liegt, so wie es aussieht, UTF-8-kodiert vor. Du importierst jedoch als ISO-8859-1 (-15, latin1), oder deine Datenbank ist nicht UTF-8-fähig (MySQL in Versionen kleiner als 4.1). Neueren Versionen von phpMyAdmin kann man beim Importieren einer Datei die darin verwendete Zeichenkodierung angeben. Wenn du dir nicht sicher bist, dass sie UTF-8-kodiert ist, hilft das Öffnen in einem Browser. Dann über das Ansicht-Menü die (Zeichen-)Kodierung auf UTF-8 und ISO-8859-1 einstellen und schauen mit welcher die Sonderzeichen richtig dargestellt werden.

    echo "$verabschiedung $name";

    1. Hallo vielen Dank für den Tipp,
      ich habe bemerkt, dass in ein paar Feldern unter "Kollation" -> "latin_swedish_ci" eingetragen ist.

      Sollte ich das einfach, bevor ich in die Tabellen einspiele dies auf UTF stellen?
      UTF_unicode_ci, UTF_bin oder UTF_general_ci? (Oder sonst etwas?)

      Vielen Dank nochmals.
      Grüße

      1. Hallo nochmals,
        hab zu testzwecken die Kollation auf utf_unicode_di gestellt. Wenn ich die SQL Datei nun hochlade, schreibt er den Namen ab dem Umlaut nicht mehr in das Feld.

        Die SQL Datei habe ich mal im Browser angeschaut. Unter Codierung Unicode UTF sehe ich anstatt den Umlauten ein ?. Wenn ich die Codierung wieder auf Westeuropäisch Windows oder ISO stelle, sieht alles normal aus.

        Grüße

      2. Oh, oki, hat sich erledigt, hab die SQL Datei mit "latin7" hochgeladen, alle Umlaute sind nun korrekt in der DB ;)

        *freu*

        1. echo $begrüßung;

          [...] hab die SQL Datei mit "latin7" hochgeladen, alle Umlaute sind nun korrekt in der DB ;)

          Latin7 ist für baltische Sprachen gedacht. Die deutschen Umlaute und das ß sind zwar bei Latin7 und (westeuropäischen) Latin1 an der selben Stelle aber einige französische Akzente beispielsweise sind anders, und die kommen ja gelegentlich auch in hierzulande üblichen Namen vor. Wenn du nicht ganz genau weißt, dass deine Daten in Latin7 bzw. ISO 8859-13 vorliegen, solltest du den Import noch einmal mit Latin1 wiederholen. Die Unterschiede zwischen den Latins und die Zuordnung zu den ISO-8859-Kodierungen zeigt die Wikipedia: http://de.wikipedia.org/wiki/ISO-8859

          echo "$verabschiedung $name";

          1. Hallo,
            super, vielen Dank für die ausführliche Erklärung. Optimal ;)
            Wünsche dir noch ein gutes Wochenende.

            Viele Grüße aus Stuttgart
            Taner ;)

          2. Sorry, jetzt muss ich nocheinmal stören.
            Das hochladen der Datei in kleinen Portionen hat nun super heklappt. Alle Umlaute passen in latin1.
            Jetzt habe ich nun festgestellt, sobald ich in phpmyAdmin die Tabelle anzeige, habe ich nicht alle Seiten zum blättern.
            1,2,3,4,5,... ab 12 springt er dann auf 36. Nach 36 kommt 60, dann kommt 84, 108. (In 24'er Schritten)

            Beim hochladen, war ich mir auch sicher, dass eine Postleitzahl 70173 als value drin war. Viele Einträge findet er auch garnicht, die aber aufgespielt wurden.
            Grüße

            1. Oki, jetzt weiß ich woran es liegt, dass er die PLZ nicht findet. Die Einträge sind alle in der DB.
              Es gibt nur ein paar Großstädte, die in der Spalte "PLZ" mehr als eine Postleitzahl eingetragen haben:

              Bsp. Köln in PLZ: 52062,52064,52066,52068,52070,52072,52074...

              Und unsere Query lautet so:

              ..... adm0 from geodb_locations where plz='"+plz+"' limit 1;");

              Grüße

      3. echo $begrüßung;

        ich habe bemerkt, dass in ein paar Feldern unter "Kollation" -> "latin_swedish_ci" eingetragen ist.
        Sollte ich das einfach, bevor ich in die Tabellen einspiele dies auf UTF stellen?

        Das bleibt dir überlassen und kommt darauf an, was für Zeichen du in den Feldern abzulegen gedenkst. Bei einer eventuellen Umstellung wandelt MySQL den Inhalt der betroffenen Felder in die neue Kodierung. Voraussetzung für eine fehlerfreie Ausführung ist, dass der Feldinhalt und die bisherige Kodierungsangabe übereinstimmt. Wenn der phpMyAdmin die Sonderzeichen richtig anzeigt, ist alles in Ordnung. Wenn nicht, hast du da erst mal eine Reparaturaufgabe. Es käme dann darauf an, wie die Symptome aussehen, um die Möglichkeiten des weiteren Vorgehens zu bewerten.

        Für die Kommunikation zwischen MySQL und den Clients ist die Angabe der Kodierung auf der Verbindung wichtiger. Bei Differenzen zwischen Verbindung und den Feldangaben nimmt MySQL automatisch eine Kodierungsumwandlung vor, so das technisch überhaupt möglich ist. Wenn nicht geht das in der Zielkodierung nicht darstellbaren Zeichen verloren. Stattdessen wird ein Ersatzzeichen gespeichert, aus dem das ursprüngliche Zeichen nicht wiederhergestellt werden kann.

        Kümmerst du dich um die Verbindung zwischen Client und Server solltest du nach dem Öffnen explizit die Kodierung setzen, in der du deine Daten zu senden gedenkst und die du bei den Ergebnissen wünschst. SET NAMES utf8 oder SET NAMES latin1 wären die hierzulande gebräuchlichsten Möglichkeiten.

        Verwendest du die Import-Funktionalität von phpMyAdmin musst du angeben, in welcher Kodierung die Datei vorliegt, die du übergeben möchtest. Ein Auswahlfeld ist im Import-Dialog vorhanden. Um den Rest kümmert sich dann phpMyAdmin.

        UTF_unicode_ci, UTF_bin oder UTF_general_ci? (Oder sonst etwas?)

        Der Unterschied zwischen "unicode" und "general" liegt in der Behandlung von Zeichen bei der Sortierung. Siehe: http://dev.mysql.com/doc/refman/5.0/en/charset-unicode-sets.html. "bin" ist dafür gedacht, wenn keinerlei lokale Sortierregeln berücksichtigt werden sollen.

        echo "$verabschiedung $name";