我有一个应用程序,它基本上从 csv 文件读取数据并将其插入 MySQL 数据库。
最初一切都很顺利(我的 sql 知识很困惑,但我正在尝试):
LOAD DATA INFILE 'filename.csv' INTO TABLE tablename
FIELDS TERMINATED BY ';' LINES TERMINATED BY '\r\n' IGNORE 1 LINES
但最近我必须验证文件中的哪些列将被插入到数据库中,所以我尝试了这样的操作:
LOAD DATA INFILE 'filename.csv' INTO TABLE tablename FIELDS TERMINATED
BY ';' LINES TERMINATED BY '\r\n' IGNORE 1 LINES (@col1,@col2,@col3,@ignore,@ignore)
SET col1= @col1, col2= @col2, col3= @col3
如果我去掉“IGNORE 1 LINES”部分,该命令可以正常工作,但我不明白为什么这会扰乱其他所有内容。我认为这是一些语法错误,但我尝试了我能想到的一切,但仍然没有效果。有人知道吗?
编辑: 如果我保留“IGNORE 1 LINES”,我会收到“您的 SQL 语法有错误;请检查手册 yadda yadda yadda 以在第 1 行‘IGNORE 1 LINES’附近使用。”
为了进行测试,我使用一个简单的文件,这是前 5 行:
col1;col2;col3;col4;col5 test;test;test;test;test test2;test2;test2;test2;test2 test3;test3;test3;test3;test3 test4;test4;test4;test4;test4
最佳答案
从语法上讲,您的陈述是正确的并且应该按预期工作。
mysql> create table tablename -> ( -> col1 varchar(32), -> col2 varchar(32), -> col3 varchar(32), -> col4 varchar(32), -> col5 varchar(32) -> ); Query OK, 0 rows affected (0.03 sec) mysql> LOAD DATA INFILE '/tmp/filename.csv' -> INTO TABLE tablename -> FIELDS TERMINATED BY ';' -> LINES TERMINATED BY '\n' -- I'm on a Mac so I'm using \n instead of \r\n -> IGNORE 1 LINES -> (@col1, @col2, @col3, @ignore, @ignore) -> SET col1 = @col1, col2 = @col2, col3 = @col3 -> ; Query OK, 4 rows affected (0.01 sec) Records: 4 Deleted: 0 Skipped: 0 Warnings: 0 mysql> select * from tablename; +-------+-------+-------+------+------+ | col1 | col2 | col3 | col4 | col5 | +-------+-------+-------+------+------+ | test | test | test | NULL | NULL | | test2 | test2 | test2 | NULL | NULL | | test3 | test3 | test3 | NULL | NULL | | test4 | test4 | test4 | NULL | NULL | +-------+-------+-------+------+------+ 4 rows in set (0.00 sec)
现在,由于您遇到语法错误,我猜测问题很可能不在 LOAD DATA
语句本身中,而是在您用来构建和执行查询字符串的 C# 代码中.
关于c# - 加载数据内文件 : can't ignore 1st row while skipping columns?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19279601/