2016-04-02 48 views
1

我有以下代碼將選定的列導入到mysql工作臺。將csv導入mysql工作臺時的列名要求

SET autocommit=0; 
    LOAD DATA LOCAL INFILE '150926.csv' INTO TABLE innodb.fh FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n' ignore 1 lines 
    (@dummy,date,@dummy,@dummy,@dummy,**CS-URI-STEM**,@dummy,@dummy,@dummy,c-ip,@dummy,@dummy,@dummy,@dummy,@dummy,@dummy, session_id,@dummy,@dummy,@dummy); 

    COMMIT; 

的問題是,我有一個命名爲我的csv文件「CS-URI-STEM」一欄,我的代碼是行不通的。我只是想知道是否需要更改我的csv文件中的列名稱,因爲它有破折號。或者請讓我知道是否需要更改代碼。許多thx !!!!!!

+1

您是否嘗試過使用反斜槓,MySQL標準轉義列和表名稱? –

回答

1

圓括號中的列名不是文件中的列名,而是您要導入的表中的列名。如果你認爲它像插入查詢中的列名或值列表那樣令人困惑,因爲它的工作方式不同 - 在這裏你指定文件中的哪一列(按列表中的位置)進入表中的哪一列(通過表中的列)。你必須忘記文件中的列名,因爲它們根本不重要。

例如:給定一個CSV文件中像這樣:

Row Number,Date,IP,Session,Whatever,Other columns... 
1,2016-01-01,10.0.0.1,21312,"ABC",... 
2,2016-01-02,10.0.0.2,21889,"XYZ",... 

和一張桌子這樣的:

| session_id | ip_address | action_date | session_description | 

用於導入的各列名單將是:

(@dummy,action_date,ip_address,session_id,session_description,@dummy,@dummy,@dummy,...) 

實際上,如果您只需要從第一個co導入數據,就可以忽略尾隨虛擬變量列(即,如果您只需要前五列的數據,但該文件有10列,則只能在導入列表中寫入五列).MySQL將給出警告(#1262,「行X被截斷;它包含更多的數據比輸入列「),但它會導入數據。