phpMyadmin: Ungültige Anzahl an Spalten im CSV-Import in Zei

Liebe Erfahrene,

beim Hochladen einer TXT in die DB bekomme ich diese Fehlermeldung:
“Ungültige Anzahl an Spalten im CSV-Import in Zeile #####.”

Die TXT lade ich als CSV, mit Spaltentrenner “^”, Daten ersetzen.
Sie ist 7MB gross, 114k Datensätze, 8 Spalten, das Hochladen dauert knapp 2 Minuten.

Wo/wie kann ich den Fehler suchen? (bin Anfänger)

Danke für Eure Hilfe,
Markus

PS: Firebug habe ich installiert, weiss aber nicht damit umzugehen.
rot geschrieben:
POST import.php 505
mit Eieruhr:
GET b_inline_edit.png

hi, 7 MB?

ich vermute mal, die datenbank ist zu groß, um sie auf einen rutsch hier zu installieren…

viewtopic.php?f=7&t=23341

du könntest versuchen, sie bei einer lokalen xamp installation reinzupacken, anschließend stück für stück (erst struktur, dann 1/3 der Daten, dann das 2. Drittel und dann den Rest) hochzuladen.

Hört sich leider kompliziert und aufwändig an, aber eine andere möglichkeit fällt mir im moment leider auch nicht ein.

gruß´

Hallo Emil,

Uff - ich dachte, ich darf 1 GB nutzen?

Kann ich denn die CSV “irgendwie” per FTP hochladen?
Gern auch portitioniert (wie macht man das in einem BAT-Programm?)
Oder vielleicht gibt es ein kleines Skript, das dies erledigt?

Habe grad über XAMP gelesen. Scheint ein Mega-Multi-Programm für Profis zu sein. Mit diversen Schicherheitsproblemen behaftet, die nach der Installation erst gelöst werden müssen. Nichts für Anfänger…

Etwas ratlos,
Markus

PS: die DB ist bereits angelegt und funktioniert,
es geht nur noch um das Hochladen der Daten.

Hi,

Darfst du ja auch - allerdings laufen Datenbank und Webspace nicht zusammen in diese Summe - und nebenher gibt es noch andere Beschränkungen, etwa die maximale Scriptlauffzeit oder der maximal zugesicherte Arbeitsspeicher.

[quote]Kann ich denn die CSV “irgendwie” per FTP hochladen?
[/quote] Nein - jedenfalls nicht so, dass die Datei datenbanktechnisch erfasst wird. Datenbank und FTP sind 2 völlig unterschiedliche Dinge.

[quote]Gern auch portitioniert (wie macht man das in einem BAT-Programm?)
Oder vielleicht gibt es ein kleines Skript, das dies erledigt?
[/quote]
Grundsätzlich kannst du die Datei einfach in einem Texteditor zerstückeln - Mit Bedacht, sodass sie sich nacheinander importieren lassen.

Xampp Löst dein Problem allerdings nicht.

Hallo Kerbination,

Dazu bräuchte ich ein kleines “HowTo”:
[ul][li] lade die Upload-Datei beispielsweise in notepad++
scrolle etwa zur Hälfte
lösche alle folgenden Zeilen und merke mir die Zeilennummer der nun letzten Zeile
speichere den ersten Teil in datei_1.txt[/li][/ul]
[ul][li] lade die Upload-Datei nochmal in den Editor
scrolle zur gemerkten Zeilennummer
lösche alle vorherigen Zeilen incl. der mit der gemerkten Zeilennummer
speichere den ersten Teil in datei_2.txt [/li][/ul]
[ul][li] datei_1.txt lade ich per phpMyAdmin “Importieren” und “Inhalt überschreiben” in die DB hoch?[/li][/ul]
[ul][li] wie mache ich es, dass die zweite Datei an die erste “angefügt” wird?[/li][/ul]

Passt das so?
Wie gross dürfen die Stücke (die Dateien) maximal sein?
Kann man das mit einem bat-Programm oder Skript machen? wie?

Besten Dank für die Unterstützung,
Markus

Ich hab auf einem Webspace für die große Datenbank Mysqldumper installiert. Import und Export der DB funktioniert damit sehr gut. Wäre vielleicht eine Alternative.

Hallo Mohyry,

Funktioniert für CSV leider auch nicht.

Kann man denn nicht lokal “irgendwas” bauen, das ein paar gesplitete Dateien
einzeln in die DB hoch lädt und dort zusammensetzt?
(Gesplittet habe ich sie schon)

Gruss, Markus

Hi,

die Dateien dürften so unbrauchbar sein - wenn du sie schon aufteilst, dann müssen die Anweisungen am Stück erhalten bleiben. Es bringt ja nichts mitten im INSERT-Befehl den Schnitt zu setzen, da meckert die Datenbanksoftware natürlich…

Ggf. solltest du die CSV in eine SQL-Datei umwandeln, damit lässt sich besser arbeiten. Insbesondere von SQL selbst.

Google halt bissle, bis du was gefunden hast^^
Eventuell geht: dbf2002.com/csv-converter/download.html
auch wenn es eigl. nur ne Trial ist bzw. man für zahlen muss… kannst ja hoffen das die Trial 7 MiB erlaubt xD
Nen online konverter z.B. den ich fand, erlaubt maximal 3 MiB… deine riesen Datei is also ansich ein Problem.

Erst mal allen herzlichen Dank für die Ideen!
Bitte bedenkt, dass ich Anwender bin und von DB noch nicht so viel verstehe.

Meine laienhafte Idee:
Wenn die CSV-Datei zu gross ist, zerlegt man sie in passende Teile.
Dann könnte man vielleicht den ersten Teil hochladen,
und mit dem zweiten so verfahren, als wäre er eine “Aktualisierung”,
also neue Daten, die zu den bisherigen “dazu” kommen…
Und wenn man das oft genug macht, müsste alles aneinandergereiht sein.

So ähnlich wird man ja später wahrscheinlich auch die DB aktualisieren?
Also die bestehenden Daten mit einer CSV-Änderungsdatei “kombinieren”,
so dass als Ergebnis veraltete Sätze gelöscht und durch neue ersetzt werden?

Aber ich habe (noch) keine Ahnung, wie man eine solche “Aktualisierung” macht.
Vielleicht kann mir das jemand erklären?

Wäre super!
Markus
PS: Google führt übrigens oft hierher ins Forum :wink:

Ansich ist MySQLdumper ne recht gute Lösung… zumindest werden so Fehler ausgeschlossen xD
Und eben die CSV dazu in sql konvertieren.

Hi,

du kannst doch einfach mal nen Teil der Datei posten damit man die Struktur erkennt und dir dann tipps zum trennen / aufteilen geben kann?

lg

Hallo Ryon,

Der Inhalt der CSV/TXT sieht so aus:

13391742^64.7298330^-13.9858231^^light_minor^Streiti^Streiti^ 13700523^50.7072738^-1.9910189^^light_minor^^^ 13700557^50.7083080^-1.9863437^^light_major^^^ 13701225^50.7038455^-1.9516107^^light_minor^Salterns Marina^^
Die Struktur der SQL sieht so aus:

CREATE TABLE IF NOT EXISTS `lights` ( `id` bigint(20) unsigned NOT NULL, `lat` float(10,7) NOT NULL, `lon` float(10,7) NOT NULL, `seamark` varchar(255) COLLATE utf8_bin NOT NULL, `seamark_type` varchar(255) COLLATE utf8_bin NOT NULL, `seamark_name` varchar(255) COLLATE utf8_bin NOT NULL, `name` varchar(255) COLLATE utf8_bin NOT NULL, `seamark_fixme` varchar(255) COLLATE utf8_bin NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
Ein Kollege hat sich per PM gemeldet und mir den Inhalt aufgeteilt in 11 SQL mit je 10000 Sätzen geschickt.
Ich habe jede SQL einzeln hochgeladen. Hat prima geklappt.
Jetzt muss ich nur noch rausfinden, wie ich das selbst automatisiert aufteilen kann…
Gruss, Markus