Sie bekommen diese Fehler, weil Sie den Pfadseparator falsch. Der Backslash ist ein Escape-Zeichen in MySQL-Abfragen, so müssen Sie die Schrägstriche mit einem anderen Backslash zu entkommen (ein Backslash in der Abfrage zu erhalten):
LOAD DATA LOCAL INFILE 'C:\\path\\to\\your.csv'
INTO TABLE campaigns
IGNORE 1 LINES
oder verwenden Schrägstriche:
LOAD DATA LOCAL INFILE 'C:/path/to/your.csv'
INTO TABLE campaigns
IGNORE 1 LINES
Dies allein wird jedoch den Import nicht erfolgreich machen. Sie müssen auch die richtigen Terminator spezifizieren, so dass der CSV-Datensätze und Felder beim Import erkannt werden:
LOAD DATA LOCAL INFILE 'C:/path/to/your.csv'
INTO TABLE suppliers
FIELDS TERMINATED BY ',' ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES
ändern Sie den Zeilenabschluss, in nur \n
wenn Ihre Dateien Zeilenumbrüche als LF (Unix-Stil) codiert sind, anstatt CR-LF (Windows-Stil). Außerdem müssen Sie das doppelte Anführungszeichen in der ENCLOSED BY
Klausel mit einem Graviszeichen entkommen, wenn die Anweisung als Powershell-String definieren:
$MysqlQuery.CommandText = "LOAD DATA ... ENCLOSED BY '`"' ... IGNORE 1 LINES"
# ^
Ohne diese zusätzlichen Klauseln die Standardwerte verwendet werden würde, die eine falsche oder nicht verursachen würde Importieren, abhängig von Ihrer Tabellendefinition.
Von der documentation:
Wenn Sie keine FIELDS
oder LINES
Klausel angeben, werden die Standardwerte die gleiche, als wenn Sie das geschrieben hatte:
FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\'
LINES TERMINATED BY '\n' STARTING BY ''
eine lokale importieren Datei auf einem Remote-Server sollte normalerweise nicht die Ursache für dieses Problem sein, wie Sie bereits vermutet haben, weil dieDas Schlüsselwortweist den Client an, die Datei zum Import an den Server zu senden.
Vom documentation:
Das LOCAL
Schlüsselwort wirkt erwarteten Speicherort der Datei und Fehlerbehandlung, wie später beschrieben. LOCAL
funktioniert nur, wenn Ihr Server und Ihr Client beide so konfiguriert wurden, dass dies zulässig ist. Wenn beispielsweise mysqld
mit der Systemvariablen local_infile
deaktiviert gestartet wurde, funktioniert LOCAL
nicht. See Section 6.1.6, “Security Issues with LOAD DATA LOCAL”.
Das LOCAL
Schlüsselwort wirkt, wo die Datei gefunden werden soll:
Wenn LOCAL
angegeben, wird die Datei vom Client-Programm auf der Client-Host und an den Server gesendet wird gelesen. Die Datei kann als vollständiger Pfadname angegeben werden, um ihren genauen Speicherort anzugeben. Wenn er als relativer Pfadname angegeben wird, wird der Name relativ zu dem Verzeichnis interpretiert, in dem das Client-Programm gestartet wurde. Wenn Sie LOCAL
mit LOAD DATA
verwenden, wird eine Kopie der Datei im temporären Verzeichnis des Servers erstellt. Dies ist nicht das Verzeichnis, das durch den Wert tmpdir
oder slave_load_tmpdir
bestimmt wird, sondern das temporäre Verzeichnis des Betriebssystems und ist im MySQL-Server nicht konfigurierbar. (In der Regel lautet das temporäre Systemverzeichnis /tmp
auf Linux-Systemen und C:\WINDOWS\TEMP
unter Windows.) Wenn nicht genügend Speicherplatz für die Kopie in diesem Verzeichnis vorhanden ist, kann die LOAD DATA LOCAL
-Anweisung fehlschlagen.
Wenn der SQL-Server auf demselben Computer ausgeführt wird, dass Sie das Skript aus ausgeführt werden, dem Pfad 'C: \ Users \ ...' nicht zugänglich sein werden. – Raziel
Ist das nicht der Grund, warum Sie LOCAL hinzufügen, damit die Datei von Ihrem lokalen Computer abgerufen wird? – TurtleBo