2017-09-01 18 views
0

我是MySQL的新手。以這種方式mysqlimport,如何進行正確的文本加載?

CREATE TABLE mail 
(
    t  DATETIME, # when message was sent 
    srcuser VARCHAR(8), # sender (source user and host) 
    srchost VARCHAR(20), 
    dstuser VARCHAR(8), # recipient (destination user and host) 
    dsthost VARCHAR(20), 
    size BIGINT,  # message size in bytes 
    INDEX (t) 
); 

我已經表中創建當我後執行該

mysqlimport -p --local cookbook mail.txt 
Enter password: 
cookbook.mail: Records: 5 Deleted: 0 Skipped: 0 Warnings: 30 

我現在郵件表

+---------------------+---------+---------+---------+---------+---------+ 
| t     | srcuser | srchost | dstuser | dsthost | size | 
+---------------------+---------+---------+---------+---------+---------+ 
| 2014-05-11 10:15:08 | barb | saturn | tricia | mars | 58274 | 
| 2014-05-12 12:48:13 | tricia | mars | gene | venus | 194925 | 
| 2014-05-12 15:02:49 | phil | mars | phil | saturn | 1048 | 
| 2014-05-12 18:59:18 | barb | saturn | tricia | venus |  271 | 
| 2014-05-14 09:31:37 | gene | venus | barb | mars | 2291 | 
| 2014-05-14 11:52:17 | phil | mars | tricia | saturn | 5781 | 
| 2014-05-14 14:42:21 | barb | venus | barb | venus | 98151 | 
| 2014-05-14 17:03:01 | tricia | saturn | phil | venus | 2394482 | 
| 2014-05-15 07:17:48 | gene | mars | gene | saturn | 3824 | 
| 2014-05-15 08:50:57 | phil | venus | phil | venus |  978 | 
| 2014-05-15 10:25:52 | gene | mars | tricia | saturn | 998532 | 
| 2014-05-15 17:35:31 | gene | saturn | gene | mars | 3856 | 
| 2014-05-16 09:00:28 | gene | venus | barb | mars |  613 | 
| 2014-05-16 23:04:19 | phil | venus | barb | venus | 10294 | 
| 2014-05-19 12:49:23 | phil | mars | tricia | saturn |  873 | 
| 2014-05-19 22:21:51 | gene | saturn | gene | venus | 23992 | 
| 0000-00-00 00:00:00 | NULL | NULL | NULL | NULL | NULL | 
| 2014-05-11 10:15:08 | NULL | NULL | NULL | NULL | NULL | 
| 2014-05-12 12:48:13 | NULL | NULL | NULL | NULL | NULL | 
| 2014-05-12 15:02:49 | NULL | NULL | NULL | NULL | NULL | 
| 0000-00-00 00:00:00 | NULL | NULL | NULL | NULL | NULL | 
+---------------------+---------+---------+---------+---------+---------+ 

這是我的txt文件

t     srcuser srchost dstuser dsthost size 
2014-05-11 10:15:08 holmes saturn tricia mars  99974 
2014-05-12 12:48:13 ines  mars  gene  venus  94902 
2014-05-12 15:02:49 phica mars  phil  saturn  81048 

我的命令出了什麼問題線和我的文本文件?爲什麼我擁有所有這些NULL

+1

當你看到類似'cookbook.mail:記錄:5刪除:0跳過:0警告:30'你應該做的第一件事是'show warnings;'(因爲當你執行另一個語句時,這些信息將會消失) )。在那裏你可能會發現爲什麼你有NULL值的信息。 – fancyPants

+0

@fancyPants我在Linux shell中運行我的命令,我應該在哪裏放置顯示警告? – MishaVacic

+0

以mysql客戶端爲例。從來沒有使用mysqlimport(因爲它只是實際命令LOAD DATA INFILE的另一個程序),所以我不能告訴你如何使用mysqlimport來做到這一點。這只是一個普遍的建議。 – fancyPants

回答

2

NULL的第一行用於文件的標題行,最後一行是因爲文件末尾有空行。

三個內部行只有t值正確設置,因爲MySQL期望輸入文件中的值用逗號分隔,並且它們被輸入文件中的其他內容分隔(我想是tab字符)。

因爲找不到分隔符,它認爲輸入文件只包含一列(t),並用NULL填充其餘分隔符。

您可以通過提供所需mysqlimport的信息,成功地解析您的文件:

  • --ignore-lines 1 - 忽略標題行;
  • --fields-terminated-by '\t' - 我假設您的文件中的值由tab分隔;
  • 輸入文件末尾的空行可以使用文本編輯器手動刪除。

的命令行是:

mysqlimport -p --local --ignore-lines 1 --fields-terminated-by '\t' cookbook mail.txt 

瞭解更多關於mysqlimport