Jak zaimportować plik CSV do tabeli MySQL?

Mam unnormalized events-diary CSV od klienta, który próbuję załadować do tabeli MySQL, aby móc refaktorować do zdrowego formatu. Stworzyłem tabelę o nazwie "CSVImport", która ma jedno pole dla każdej kolumny pliku CSV. Plik CSV zawiera 99 kolumn, więc było to wystarczająco trudne zadanie samo w sobie: {]}

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);

Nie ma ograniczeń w tabeli, a wszystkie pola zawierają wartości VARCHAR (256), z wyjątkiem kolumn, które zawierają liczby (reprezentowane przez INT), yes / no (reprezentowane przez BIT), ceny (reprezentowane przez dziesiętne) i rozmycia tekstu (reprezentowane przez tekst).

Próbowałem załadować dane do pliku:

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               | 
...

Cała tabela jest wypełniona NULL.

Myślę, że problem polega na tym, że rozmycia tekstu zawierają więcej niż jedną linię, a MySQL parsuje plik tak, jakby każda nowa linia odpowiadała jednemu wierszowi bazy danych. Mogę załadować plik do OpenOffice bez problemu.

Clientdata.plik csv zawiera 2593 linie i 570 rekordów. Pierwsza linia zawiera nazwy kolumn. Myślę, że jest rozdzielany przecinkami, a tekst jest najwyraźniej rozdzielany podwójnym cytatem.

Aktualizacja:

W razie wątpliwości przeczytaj instrukcję: http://dev.mysql.com/doc/refman/5.0/en/load-data.html

Dodałem do LOAD DATA informację, że OpenOffice był na tyle sprytny, by wywnioskować, a teraz ładuje poprawną liczbę rekordów:

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;

Ale nadal istnieje wiele CAŁKOWICIE NULL zapisów, a żadne z danych, które załadowany wydaje się być we właściwym miejscu.

Author: codeforester, 2010-09-03

19 answers

Sednem problemu wydaje się dopasowanie kolumn w pliku CSV do kolumn w tabeli.

Wiele graficznych klientów mySQL ma bardzo ładne okna dialogowe importu dla tego typu rzeczy.

Moim ulubionym zadaniem jest Windows based HeidiSQL . Daje graficzny interfejs do zbudowania polecenia LOAD DATA; można go później programowo użyć.

Importuj plik tekstowy

Zrzut ekranu: okno dialogowe "Importuj plik tekstowy"

Aby otworzyć Import textfile " okno dialogowe, przejdź do Tools > Import CSV file:

Tutaj wpisz opis obrazka

 137
Author: Pekka,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-24 19:20:42

Użyj mysqlimport aby załadować tabelę do bazy danych:

mysqlimport --ignore-lines=1 \
            --fields-terminated-by=, \
            --local -u root \
            -p Database \
             TableName.csv

Znalazłem w http://chriseiffel.com/everything-linux/how-to-import-a-large-csv-file-to-mysql/

Aby ogranicznik stał się tabulatorem, użyj --fields-terminated-by='\t'

 203
Author: michalzuber,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-16 22:59:46

Najprostszy sposób, w jaki zaimportowałem 200 + wierszy, znajduje się poniżej polecenia w oknie phpMyAdmin sql

Mam prostą tabelę kraju z dwoma kolumnami CountryId, CountryName

Tutaj jest .dane csv PLIK CSV

Oto polecenie:

LOAD DATA INFILE 'c:/country.csv' 
INTO TABLE country 
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS

Pamiętaj o jednej rzeczy, nigdy nie pojawiaj się w drugiej kolumnie, w przeciwnym razie import zostanie zatrzymany

 86
Author: DareDevil,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-11 18:37:03

Wiem, że pytanie jest stare , ale chciałbym podzielić się tym

Użyłem tej metody do importowania ponad 100k rekordów (~5MB) w 0.046 sec

Oto Jak to zrobić:

LOAD DATA LOCAL INFILE  
'c:/temp/some-file.csv'
INTO TABLE your_awesome_table  
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
(field_1,field_2 , field_3);

Bardzo ważne jest, aby dołączyć ostatnią linię, jeśli masz więcej niż jedno pole, tzn. Zwykle pomija ostatnie pole (MySQL 5.6.17)

LINES TERMINATED BY '\n'
(field_1,field_2 , field_3);

Następnie, zakładając, że masz pierwszy wiersz jako tytuł dla swoich pól, możesz również dołączyć tę linię

IGNORE 1 ROWS

Tak to wygląda, jeśli plik ma wiersz nagłówka.

LOAD DATA LOCAL INFILE  
'c:/temp/some-file.csv'
INTO TABLE your_awesome_table  
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS
(field_1,field_2 , field_3);
 72
Author: Fahad,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-21 15:56:27

PhpMyAdmin może obsługiwać import CSV. Oto kroki:

  1. Przygotuj plik CSV, aby pola były w tej samej kolejności, co pola tabeli MySQL.

  2. Usuń wiersz nagłówka z pliku CSV (jeśli istnieje), tak aby w pliku znajdowały się tylko dane.

  3. Przejdź do interfejsu phpMyAdmin.

  4. Wybierz tabelę w lewym menu.

  5. Kliknij przycisk Importuj na górze.

  6. Przejdź do pliku CSV plik.

  7. Wybierz opcję "CSV za pomocą danych ładowania".

  8. Wpisz", " w "pola zakończone przez".

  9. Wprowadź nazwy kolumn w tej samej kolejności, w jakiej znajdują się w tabeli bazy danych.

  10. Kliknij przycisk Idź i gotowe.

Jest to notka, którą przygotowałem do mojego przyszłego wykorzystania i dzielenie się tutaj, jeśli ktoś inny może skorzystać.

 33
Author: Farhan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-28 04:13:09

Można to naprawić, wymieniając kolumny w instrukcji you LOAD DATA. Z instrukcji :

LOAD DATA INFILE 'persondata.txt' INTO TABLE persondata (col1,col2,...);

... więc w Twoim przypadku musisz wyświetlić listę 99 kolumn w kolejności, w jakiej pojawiają się w pliku csv.

 12
Author: lafncow,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-29 21:38:26

Spróbuj tego, zadziałało dla mnie

    LOAD DATA LOCAL INFILE 'filename.csv' INTO TABLE table_name FIELDS TERMINATED BY ',' ENCLOSED BY '"' IGNORE 1 ROWS;

Ignoruj 1 wiersz ignoruje pierwszy wiersz zawierający fieldnames. Zauważ, że dla nazwy pliku musisz wpisać ścieżkę bezwzględną pliku.

 8
Author: David,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-16 01:44:25

Jeśli używasz MySQL Workbench (obecnie Wersja 6.3) możesz to zrobić przez:

  1. Kliknij prawym przyciskiem myszy na "tabele";
  2. Wybierz Kreator Importu Danych Tabeli;
  3. Wybierz plik csv i postępuj zgodnie z instrukcjami (JSON może być również używany); Dobrą rzeczą jest to, że możesz utworzyć nową tabelę na podstawie pliku csv, który chcesz zaimportować lub załadować dane do istniejącej tabeli

Tutaj wpisz opis obrazka

 8
Author: Vitaliy Pak,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-24 12:51:25

Linia poleceń mysql jest podatna na zbyt wiele problemów przy imporcie. Oto jak to zrobić:

  • Użyj programu excel, aby edytować nazwy nagłówków, aby nie miały spacji
  • Zapisz jako .csv
  • Użyj darmowej przeglądarki Navicat Lite SQL do importowania i automatycznego tworzenia nowej tabeli (nadaj jej nazwę)
  • Otwórz nową tabelę Wstaw główną kolumnę auto number dla ID
  • Zmień typ kolumn zgodnie z potrzebami.
  • Zrobione!
 7
Author: user1464271,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-25 00:53:44

Widzę coś dziwnego. Używasz do ucieczki tej samej postaci, której używasz do zamykania. Tak więc silnik nie wie, co zrobić, gdy znajdzie "" i myślę, że dlatego nic nie wydaje się być we właściwym miejscu. Myślę, że jeśli usuniesz linię ucieczki, powinno być świetnie. Like:

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

Chyba, że analizujesz (ręcznie, wizualnie, ... ) swój CSV i znaleźć, który znak używa do ucieczki. Czasami jest"\". Ale jeśli go nie masz, nie używaj go.

 5
Author: Juan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-12-17 10:57:11

Kolejnym rozwiązaniem jest użycie narzędzia csvsqlz pakietu amazing csvkit.

Przykład użycia:

csvsql --db mysql://$user:$password@localhost/$database --insert --tables $tablename  $file

To narzędzie może automatycznie wnioskować typy danych( zachowanie domyślne), tworzyć tabelę i wstawiać dane do utworzonej tabeli. --overwrite opcja może być użyta do upuszczenia tabeli, jeśli już istnieje. --insert opcja-wypełnienie tabeli z pliku.

Aby zainstalować pakiet

pip install csvkit

Warunki wstępne: python-dev, libmysqlclient-dev, MySQL-python

apt-get install python-dev libmysqlclient-dev
pip install MySQL-python
 4
Author: ruvim,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-21 14:15:20

Jak importować pliki csv do tabel sql

Przykładowy plik: Overseas_trade_index Dane plik CSV

Kroki:

  1. Potrzeba utworzenia tabeli dla overseas_trade_index.

  2. Trzeba utworzyć kolumny związane z plikiem csv.

    Zapytanie SQL:

    ( id int not null primary key auto_increment,
    series_reference varchar (60),
    period varchar (60),
    data_value decimal(60,0),
    status varchar (60),
    units varchar (60),
    magnitude int(60),
    subject text(60),
    group text(60),
    series_title_1 varchar (60),
    series_title_2 varchar (60),
    series_title_3 varchar (60),
    series_title_4 varchar (60),
    series_title_5 varchar (60),
     );
    
  3. Potrzeba podłączenia bazy danych mysql w terminalu.

    =>show databases;
    =>use database;
    =>show tables;
    
  4. Wprowadź To polecenie, aby zaimportować dane csv do tabel mysql.

    load data infile '/home/desktop/Documents/overseas.csv' into table trade_index fields terminated by ',' lines terminated by '\n' (series_reference,period,data_value,status,units,magnitude,subject,series_title1,series_title_2,series_title_3,series_title_4,series_title_5);
    
  5. Znajdź te dane indeksu handlu zagranicznego na sqldatabase:

    select * from trade_index;
    
 3
Author: sivamani,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-06-09 20:52:57

Jeśli używasz komputera z systemem windows z załadowanym arkuszem kalkulacyjnym Excel, nowa wtyczka mySql do Excela jest fenomenalna. Ludzie z Oracle naprawdę wykonali świetną robotę przy tym oprogramowaniu. Możesz nawiązać połączenie z bazą danych bezpośrednio z programu Excel. Ta wtyczka przeanalizuje Twoje dane i skonfiguruje tabele w formacie zgodnym z danymi. Miałem potworne duże pliki csv z danymi do konwersji. To narzędzie znacznie oszczędzało czas.

Http://dev.mysql.com/downloads/windows/excel/

Możesz wprowadzać aktualizacje z programu Excel, które zostaną przesłane do bazy danych online. To działało niezmiernie dobrze z plikami mySql utworzonymi na ultra tani hosting GoDaddy współdzielony. (Uwaga podczas tworzenia tabeli w firmie GoDaddy należy wybrać niektóre niestandardowe ustawienia, aby włączyć dostęp do bazy danych poza witryną...)

Dzięki tej wtyczce masz czystą interakcję między arkuszem kalkulacyjnym XL a mySql online przechowywanie danych.

 2
Author: zipzit,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-23 09:07:47
 2
Author: Georgy Gobozov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-11-14 23:42:44

Używam mysql workbench do tego samego zadania.

  1. Utwórz nowy schemat
  2. Otwórz nowo utworzony Schemat
  3. Kliknij prawym przyciskiem myszy "Tables" i wybierz "Table Data Import Wizard"
  4. podaj ścieżkę pliku csv i nazwę tabeli, a na koniec skonfiguruj typ kolumny, ponieważ Kreator ustawia domyślny typ kolumny na podstawie ich wartości.

Uwaga: spójrz na plik dziennika mysql workbench pod kątem jakichkolwiek błędów, używając " tail - f [mysqlworkbenchpath]/log / WB*.log "

 2
Author: Mehdi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-03-01 03:54:22

Oto przykładowy zrzut ekranu pliku excel:

Tutaj wpisz opis obrazka

Zapisz jako i wybierz .csv.

I będziesz miał jak pokazano poniżej .dane csv zrzut ekranu, jeśli otworzysz za pomocą Notatnika++ lub innego notatnika.

Tutaj wpisz opis obrazka

Upewnij się, że usuniesz nagłówek i wyrównasz kolumnę.csv jak w tabeli mysql. Zastąp folder_name nazwą folderu

LOAD DATA LOCAL INFILE
'D:/folder_name/myfilename.csv" Do tabeli mail Pola ZAKOŃCZONE PRZEZ"," (fname, lname, email, telefon);

Jeśli big data, możesz wziąć kawę i załadować ją!.

To wszystko, czego potrzebujesz.

 1
Author: Magige Daniel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-31 11:01:25

Zapytanie PHP o import pliku csv do bazy danych mysql

$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));
   }

**przykładowe dane pliku CSV * *

name,mobile,email
Christopher Gritton,570-686-3439,[email protected]
Brandon Wilson,541-309-5149,[email protected]
Craig White,516-795-8065,[email protected]
David Whitney,713-214-3966,[email protected]
 0
Author: Suwarnakumar Kanapathipillai,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-29 07:05:28

Zmień nazwę serwera,nazwę użytkownika, hasło, nazwę dbname, ścieżkę pliku, nazwę tabeli i pole, które znajduje się w bazie danych, którą chcesz wstawić

<?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>'
       }
    ?>
 0
Author: Srikrushna,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-13 06:54:26

Zrobiłem to w prosty sposób używając phpmyadmin. Podążałem za krokami @Farhan, ale wszystkie dane były eledowane w jednej kolumnie. Jak to zrobiłem:

  1. stworzył plik CSV i usunął wiersz nagłówka z nazwami kolumn. Przechowywał tylko dane.
  2. utworzyłem tabelę z nazwami kolumn pasującymi do kolumn csv.
  3. pamiętaj, aby przypisać odpowiednie typy do każdej kolumny.
  4. po prostu wybrałem import i poszedłem do Zakładki import.
  5. w przeglądaj wybrałem plik CSV i zachowałem wszystkie opcje jako jest.
  6. ku mojemu zaskoczeniu wszystkie dane zostały pomyślnie zaimportowane w odpowiednich kolumnach.
 0
Author: Amit Ray,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-07-04 15:03:18