将csv导入mysql工作台时的列名要求

时间:2016-04-02 23:24:34

标签: mysql sql csv load-data-infile

我有以下代码将所选列导入mysql workbench。

    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文件中的列名,因为它有破折号。或者如果我需要更改代码,请告诉我。很多人!!!!!!

1 个答案:

答案 0 :(得分: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,...)

事实上,如果您只需要从第一列导入数据(例如,如果您只需要前五列中的数据但文件有10列,那么您可以省去拖尾虚拟变量)只能在导入列表中写入五列。)MySQL会发出警告(#1262,"行X被截断;它包含的数据多于输入列" )但它会导入数据。