382 Stimmen

Wie kann ich eine CSV-Datei in eine MySQL-Tabelle importieren?

Ich habe eine unnormalisierte Ereignis-Tagebuch-CSV von einem Kunden, die ich versuche, in eine MySQL-Tabelle zu laden, so dass ich in ein vernünftiges Format umgestalten kann. Ich habe eine Tabelle namens "CSVImport" erstellt, die für jede Spalte der CSV-Datei ein Feld enthält. Die CSV-Datei enthält 99 Spalten, so dass dies an sich schon eine schwierige Aufgabe war:

CREATE TABLE 'CSVImport' (id INT);
ALTER TABLE CSVImport ADD COLUMN Title VARCHAR(256);
ALTER TABLE CSVImport ADD COLUMN Company VARCHAR(256);
ALTER TABLE CSVImport ADD COLUMN NumTickets VARCHAR(256);
...
ALTER TABLE CSVImport Date49 ADD COLUMN Date49 VARCHAR(256);
ALTER TABLE CSVImport Date50 ADD COLUMN Date50 VARCHAR(256);

Für die Tabelle gelten keine Einschränkungen, und alle Felder enthalten VARCHAR(256)-Werte, mit Ausnahme der Spalten, die Zählungen (dargestellt durch INT), Ja/Nein (dargestellt durch BIT), Preise (dargestellt durch DECIMAL) und Textauszüge (dargestellt durch TEXT) enthalten.

Ich habe versucht, Daten in die Datei zu laden:

LOAD DATA INFILE '/home/paul/clientdata.csv' INTO TABLE CSVImport;
Query OK, 2023 rows affected, 65535 warnings (0.08 sec)
Records: 2023  Deleted: 0  Skipped: 0  Warnings: 198256
SELECT * FROM CSVImport;
| NULL             | NULL        | NULL           | NULL | NULL               | 
...

Der ganze Tisch ist gefüllt mit NULL .

Ich denke, das Problem liegt darin, dass die Textauszüge mehr als eine Zeile enthalten und MySQL die Datei so analysiert, als ob jede neue Zeile einer Datenbankzeile entsprechen würde. Ich kann die Datei ohne Probleme in OpenOffice laden.

Die Datei clientdata.csv enthält 2593 Zeilen und 570 Datensätze. Die erste Zeile enthält Spaltennamen. Ich glaube, sie ist durch Kommata getrennt, und der Text ist offensichtlich durch doppelte Anführungszeichen getrennt.

UPDATE :

Im Zweifelsfall lesen Sie das Handbuch: http://dev.mysql.com/doc/refman/5.0/en/load-data.html

Ich habe einige Informationen zu den LOAD DATA Anweisung, die OpenOffice schlau genug war, um daraus zu schließen, und jetzt lädt es die richtige Anzahl von Datensätzen:

LOAD DATA INFILE "/home/paul/clientdata.csv"
INTO TABLE CSVImport
COLUMNS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
ESCAPED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES;

Aber es gibt immer noch eine ganze Reihe von NULL Datensätze, und keine der geladenen Daten scheint sich an der richtigen Stelle zu befinden.

3voto

zipzit Punkte 3348

Wenn Sie einen Windows-Rechner mit geladener Excel-Tabelle verwenden, ist das neue mySql-Plugin für Excel phänomenal. Die Leute von Oracle haben bei dieser Software wirklich gute Arbeit geleistet. Sie können die Datenbankverbindung direkt von Excel aus herstellen. Das Plugin analysiert Ihre Daten und richtet die Tabellen für Sie in einem Format ein, das mit den Daten übereinstimmt. Ich hatte einige riesige csv-Dateien mit Daten zu konvertieren. Dieses Tool war eine große Zeitersparnis.

http://dev.mysql.com/downloads/Windows/excel/

Sie können von Excel aus Aktualisierungen vornehmen, die dann online in die Datenbank übertragen werden. Dies funktionierte außerordentlich gut mit mySql-Dateien, die auf dem ultragünstigen GoDaddy Shared Hosting erstellt wurden. (Wenn Sie die Tabelle bei GoDaddy erstellen, müssen Sie einige nicht standardmäßige Einstellungen wählen, um den Zugriff auf die Datenbank außerhalb des Standorts zu ermöglichen...)

Mit diesem Plugin haben Sie pure Interaktivität zwischen Ihrer XL-Tabelle und dem Online-MySql-Datenspeicher.

2voto

Amit Ray Punkte 3425

Ich habe es auf einfache Weise mit phpmyadmin gemacht. Ich habe die Schritte von @Farhan befolgt, aber alle Daten wurden in einer einzigen Spalte eltert. Wie ich das gemacht habe:

  1. Ich habe eine CSV-Datei erstellt und die Kopfzeile mit den Spaltennamen gelöscht. Nur die Daten wurden beibehalten.
  2. Ich habe eine Tabelle erstellt, deren Spaltennamen mit den CSV-Spalten übereinstimmen.
  3. Denken Sie daran, jeder Spalte einen geeigneten Typ zuzuordnen.
  4. Ich habe gerade den Import ausgewählt und bin zur Registerkarte Import gegangen.
  5. Beim Durchsuchen habe ich die CSV-Datei ausgewählt und alle Optionen unverändert gelassen.
  6. Zu meiner Überraschung wurden alle Daten erfolgreich in die entsprechenden Spalten importiert.

1voto

Srikrushna Punkte 3387

Ändern Sie den Servernamen, den Benutzernamen, das Passwort, den Db-Namen, den Pfad Ihrer Datei, den Tabellennamen und das Feld in Ihrer Datenbank, das Sie einfügen möchten.

<?php
    $servername = "localhost";
    $username = "root";
    $password = "";
    $dbname = "bd_dashboard";
    //For create connection
    $conn = new mysqli($servername, $username, $password, $dbname);

    $query = "LOAD DATA LOCAL INFILE 
                'C:/Users/lenovo/Desktop/my_data.csv'
                INTO TABLE test_tab
                FIELDS TERMINATED BY ','
                LINES TERMINATED BY '\n'
                IGNORE 1 LINES
                (name,mob)";
    if (!$result = mysqli_query($conn, $query)){
        echo '<script>alert("Oops... Some Error occured.");</script>';
        exit();
            //exit(mysqli_error());
       }else{
        echo '<script>alert("Data Inserted Successfully.");</script>'
       }
    ?>

1voto

Magige Daniel Punkte 896

Hier ist ein Screenshot einer Excel-Datei:

enter image description here

Speichern unter und wählen Sie .csv.

Wenn Sie die .csv-Daten mit Notepad++ oder einem anderen Notepad öffnen, erhalten Sie den unten abgebildeten Screenshot.

enter image description here

Stellen Sie sicher, dass Sie die Kopfzeile entfernen und die Spalten in der .csv-Datei wie in der Mysql-Tabelle ausrichten. Ersetzen Sie folder_name durch Ihren Ordnernamen

DATEN LADEN LOKALE INFODATEI
D:/Ordnername/meinDateiname.csv' INTO TABLE mail MIT ',' BEENDETE FELDER (fname,lname ,email, telefon);

Wenn große Daten, können Sie Kaffee nehmen und haben es laden!

Das ist alles, was Sie brauchen.

1voto

PHP-Abfrage zum Importieren von csv-Dateien in eine mysql-Datenbank

$query = <<<EOF
            LOAD DATA LOCAL INFILE '$file'
             INTO TABLE users
             FIELDS TERMINATED BY ','
             LINES TERMINATED BY '\n'
             IGNORE 1 LINES
            (name,mobile,email)
    EOF;
if (!$result = mysqli_query($this->db, $query))
   {
        exit(mysqli_error($this->db));
   }

**Beispiel CSV-Datei Daten **

name,mobile,email
Christopher Gritton,570-686-3439,ChristopherKGritton@inbound.plus
Brandon Wilson,541-309-5149,BrandonMWilson@inbound.plus
Craig White,516-795-8065,CraigJWhite@inbound.plus
David Whitney,713-214-3966,DavidCWhitney@inbound.plus

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X