Nikko: Mysql PHPmyAdmin CSV Import Ungültiger Parameter

Hallo,

PHPmyAdmin bietet erfreulicherweise einen CSV-Import an. Leider scheine ich da irgendwas falsch zu machen oder es funktioniert nur unter bestimmten Voraussetzungen.

Datenbeispiel (CSV Datei):

http://www.asus.com/;ASUS Homepage;1322591203
http://member.asus.com/;ASUS Member;1322591203
http://www.asus.com/support/download;ASUS Software Download;1322591204
http://www.asus.com/support;ASUS Technical Support;1322591203

Diese Datei versuche ich nun zu importieren. Bin mir nicht sicher ob das überhaupt geht, weil die Tabelle mehr Felder hat.

Also 1. Versuch:

  • Datei hochladen

  • Einstellungen ändern: Trenner = ;  Anführungszeichen usw. weg

  • Spaltennamen eingeben mit Komma, also bsp. spalte3,spalte5,spalte2

Dann auf OK und es kommt folgende Fehlermeldung:

"MySQL meldet: Ungültiger Parameter für CSV-Import: Felder ausgeschlossen von"
Felder ausgeschlossen von? Von was?

Ok, dann dachte ich vielleicht liegts ja daran, dass alle Felder benannt werden müssen, also CSV umgeändert und die restlichen Felder mit leerem Inhalt auch noch eingefügt, ebenso die Spaltennamen beim Import angepasst.

Resultat: Wieder gleicher Fehler.

Also wieder neue Versuche: Semikolon geändert auf Komma, Alle Felder in Hochkommata.

Doch immer wieder der gleiche Fehler. Warum?

Ach ja und noch eine Frage: Bei der Auswahl der Importfunktionen gibt es Spalten eingeschlossen von (Standard) ", das ist ja noch klar, aber was meint PHPmyAdmin mit Spalten escaped mit (Standard) "? Escapen geht doch in der Regel mit \ oder sonstwas, aber ausgerechnet Hochkommata in der Voreistellung auch noch gleichzeitig als Voreinstellung für eingeschlossene Felder, kapiere ich nicht wirklich.

  1. Tach!

    Also 1. Versuch:

    • Einstellungen ändern: Trenner = ;  Anführungszeichen usw. weg

    Wenn die Felder nicht mit "" oder ähnlich eingefasst sind, stört es trotzdem nicht, wenn in den format-spezifischen Optionen " angegeben sind. Diese Einrahmungen sind optional.

    Dann auf OK und es kommt folgende Fehlermeldung:

    "MySQL meldet: Ungültiger Parameter für CSV-Import: Felder ausgeschlossen von"
    Felder ausgeschlossen von? Von was?

    Probier es mal mit Englisch. Es könnte sich um einen Übersetzungsfehler handeln.

    Ach ja und noch eine Frage: Bei der Auswahl der Importfunktionen gibt es Spalten eingeschlossen von (Standard) ", das ist ja noch klar, aber was meint PHPmyAdmin mit Spalten escaped mit (Standard) "? Escapen geht doch in der Regel mit \ oder sonstwas, aber ausgerechnet Hochkommata in der Voreistellung auch noch gleichzeitig als Voreinstellung für eingeschlossene Felder, kapiere ich nicht wirklich.

    Dann beschäftige dich mit dem CSV-Standard. Die Regel besagt, dass " durch Verdopplung maskiert werden. Ein " ist also ein Feldbegrenzer, zwei "" stehen für ein literales ".

    dedlfix.

    1. Tach!

      "MySQL meldet: Ungültiger Parameter für CSV-Import: Felder ausgeschlossen von"
      Felder ausgeschlossen von? Von was?

      Probier es mal mit Englisch. Es könnte sich um einen Übersetzungsfehler handeln.

      Sieht so aus: http://sourceforge.net/mailarchive/message.php?msg_id=27110471, suchen nach "Felder ausgeschlossen von", da sieht man die falsche Übersetzung von "Columns escaped by", was zwischendrin mal "Felder escaped von" war. Und da du (Nikko) aus den Optionen das " entfernt hast, sind die Felder nun von nichts mehr eingeschlossen. Wie gesagt, lass es stehen oder nimm ein anderes Zeichen, das nicht in den Daten vorkommt.

      dedlfix.

      1. Hallo

        Wie gesagt, lass es stehen oder nimm ein anderes Zeichen, das nicht in den Daten vorkommt.

        schon ausprobiert, leider keine Verbesserung, Fehler bleibt der Gleiche.

        Gruss
        Nikko

    2. Hallo

      Probier es mal mit Englisch. Es könnte sich um einen Übersetzungsfehler handeln.

      ok, "Invalid column count in CSV input on line 1"

      Hilft mir nicht wirklich weiter. Wissenswert wäre schon mal, ob die CSV weniger Felder enthalten darf als die Tabelle.

      Dann beschäftige dich mit dem CSV-Standard. Die Regel besagt, dass " durch Verdopplung maskiert werden. Ein " ist also ein Feldbegrenzer, zwei "" stehen für ein literales ".

      Ah, ok wusste ich nicht, zumal PHPManual bei der CSV Funktion str_getcsv auch den Backslash als Escape favorisiert: "Bestimmt das Maskierungszeichen (nur ein Zeichen). Standardmäßig wird ein Backslash () verwendet. "

      Gruss
      Nikko

      1. Tach!

        Probier es mal mit Englisch. Es könnte sich um einen Übersetzungsfehler handeln.
        ok, "Invalid column count in CSV input on line 1"
        Hilft mir nicht wirklich weiter. Wissenswert wäre schon mal, ob die CSV weniger Felder enthalten darf als die Tabelle.

        Das ist jetzt aber nicht derselbe Fehler.

        Wenn man LOAD DATA INFILE direkt verwendet, dann darf sie weniger enthalten. Probier es für den PMA mit einer ersten Zeile, die die Feldnamen enthält (inklusive dem Haken bei der Option zum Überspringen der ersten Zeile). Ansonsten hilft vielleicht, eine temporäre Tabelle mit passender Feldanzahl zu erstellen und nach dem Import deren Daten mit INSERT ... SELECT ... in die eigentliche Tabelle zu holen.

        Die Regel besagt, dass " durch Verdopplung maskiert werden. Ein " ist also ein Feldbegrenzer, zwei "" stehen für ein literales ".
        Ah, ok wusste ich nicht, zumal PHPManual bei der CSV Funktion str_getcsv auch den Backslash als Escape favorisiert: "Bestimmt das Maskierungszeichen (nur ein Zeichen). Standardmäßig wird ein Backslash () verwendet. "

        Es gab lange Zeit keinen beschriebenen Standard, so dass unterschiedliche "Dialekte" im Umlauf sind.

        dedlfix.

        1. Hallo,

          Das ist jetzt aber nicht derselbe Fehler.

          ja hast Du recht ;-) Ich hatte die CSV noch nicht wieder im Original abgespeichert. Somit ist der Fall auch gelöst, es war tatsächlich das Hochkommata, dieses darf man nicht leer lassen. Seltsam aber ok.

          Nur noch eine Frage am Rande, ein Feld meiner Tabelle stellt den Inhalt eines anderen Feldes als MD5 dar. Jetzt habe ich das zwar so gelöst, dass ich die CSV direkt mit dem MD5 Wert als zusätzliches Feld generiere aber geht das auch möglicherweise automatisch, ich meine jetzt beim CSV Import? Ich habe mich noch nicht mit Trigger beschäftigt, könnte mir aber vorstellen, das es dadurch auch zu lösen wäre?

          Dank Dir
          Nikko

          1. Tach!

            Nur noch eine Frage am Rande, ein Feld meiner Tabelle stellt den Inhalt eines anderen Feldes als MD5 dar. Jetzt habe ich das zwar so gelöst, dass ich die CSV direkt mit dem MD5 Wert als zusätzliches Feld generiere aber geht das auch möglicherweise automatisch, ich meine jetzt beim CSV Import? Ich habe mich noch nicht mit Trigger beschäftigt, könnte mir aber vorstellen, das es dadurch auch zu lösen wäre?

            Das kommt darauf an, was du damit bezweckst. Wenn die MD5-Summe ein Kontrollwert auf Änderungen ist, sollte sich dieser vermutlich nicht automatisch mit jeder Inhaltsänderung nachziehen. Ansonsten könnte ja dieser Wert eigentlich auch erst zu jeder Abfrage errechnet werden (ohne die Performance zu betrachten). Ansonsten ja, ein Trigger hilft, Inhalte bei Änderungen anzupassen.

            dedlfix.