如何將CSV文件導入到MySQL表中




mysql import csv (9)

我知道這個問題很老 ,但我想分享一下

我使用此方法在0.046秒內導入超過100K條記錄( 〜5MB)

這是你如何做到的:

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

包含最後一行非常重要,如果您有多個字段,即通常會跳過最後一行(MySQL 5.6.17)

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

然後,假設你的第一行是你的領域的標題 ,你可能也想包括這一行

IGNORE 1 ROWS

這就是你的文件有一個標題行的樣子。

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

我有一個來自客戶端的非標準化事件日誌CSV,我試圖將其加載到MySQL表中,以便我可以重構為一種理智的格式。 我創建了一個名為'CSVImport'的表格,其中每個CSV文件列都有一個字段。 CSV包含99列,所以這本身就是一項艱鉅的任務:

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

表中沒有約束條件,除了包含計數(由INT表示),是/否(由BIT表示),價格(由DECIMAL表示)以及文本模糊(除外)的列以外,所有字段都保存VARCHAR由TEXT表示)。

我試圖加載數據到文件中:

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

整個表填充NULL

我認為問題在於文本blurb包含多行,而MySQL正在解析文件,就好像每個新行都對應一個數據庫行一樣。 我可以毫無問題地將文件加載到OpenOffice中。

clientdata.csv文件包含2593行和570條記錄。 第一行包含列名稱。 我認為這是用逗號分隔的,文本顯然是用雙引號分隔的。

更新:

如有疑問,請閱讀手冊: http://dev.mysql.com/doc/refman/5.0/en/load-data.html : http://dev.mysql.com/doc/refman/5.0/en/load-data.html

我向LOAD DATA聲明中添加了一些信息,即OpenOffice足夠聰明地推斷,現在它載入正確數量的記錄:

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;

但仍然有很多完全NULL記錄,並且所有加載的數據似乎都不在正確的位置。


更改服務器名稱,用戶名,密碼,dbname,文件路徑,表名以及要插入數據庫中的字段

<?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>'
       }
    ?>

PHP查詢導入csv文件到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));
   }

**示例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]

phpMyAdmin可以處理CSV導入。 這裡是步驟:

  1. 準備CSV文件以使字段與MySQL表字段具有相同的順序。

  2. 從CSV中刪除標題行(如果有),以便只有數據在文件中。

  3. 轉到phpMyAdmin界面。

  4. 選擇左側菜單中的表格。

  5. 點擊頂部的導入按鈕。

  6. 瀏覽到CSV文件。

  7. 選擇選項“使用加載數據的CSV”。

  8. 在“終止的字段”中輸入“,”。

  9. 按照與數據庫表中相同的順序輸入列名。

  10. 點擊開始按鈕,你就完成了。

這是我為未來使用做好準備的一個提示,如果有其他人可以從中獲益,請在此分享。


問題的核心似乎是將CSV文件中的列與表中的列匹配。

許多圖形化的mySQL客戶端都有非常好的導入對話框。

我最喜歡的工作是基於Windows的HeidiSQL 。 它為您提供了一個圖形界面來構建LOAD DATA命令; 您可以稍後以編程方式重新使用它。

屏幕截圖:“導入文本文件”對話框

要打開導入文本文件“對話框,請轉至Tools > Import CSV file


如果您使用的是裝有Excel電子表格的Windows計算機,則Excel的新mySql插件是非常好的。 甲骨文的人真的在這個軟件上做了很好的工作。 您可以直接從Excel創建數據庫連接。 該插件將分析您的數據,並以與數據一致的格式為您設置表格。 我有一些龐大的csv數據文件要轉換。 這個工具是一個很大的節省時間。

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

您可以在Excel中進行更新,以便在線填充到數據庫。 這對於在超便宜的GoDaddy共享主機上創建的mySql文件效果非常好。 (請注意,當您在GoDaddy上創建表格時,必須選擇一些非標准設置來啟用數據庫的非現場訪問...)

使用這個插件,您的XL電子表格和在線mySql數據存儲之間有純粹的交互性。


您可以通過列出LOAD DATA語句中的列來解決此問題。 從manual

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

...所以在你的情況下,你需要按照它們出現在csv文件中的順序列出99列。


我導入了200多行的最簡單的方法是在phpmyadmin sql窗口下面的命令

我有一個國家簡單的表格,有兩列CountryId,CountryName

這裡是.csv數據

這裡是命令:

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

記住一件事,永遠不要出現在第二欄,否則你的進口將停止


這裡是示例excel文件的屏幕截圖:

另存為並選擇.csv。

如果您使用記事本++或任何其他記事本打開,您將擁有如下所示的.csv數據屏幕截圖。

確保你刪除標題,並在.csv列對齊,如mysql表中。 用您的文件夾名稱替換folder_name

LOAD DATA LOCAL INFILE
'D:/folder_name/myfilename.csv'INTO TABLE郵件字段TERMINATED BY','(fname,lname,email,phone);

如果大數據,你可以喝咖啡,並加載!

這就是你需要的。





load-data-infile