加载数据文件:跳过列时不能忽略第一行

本文关键字:一行 不能 文件 数据 加载 | 更新日期: 2023-09-27 18:34:42

我有一个应用程序,它基本上从csv文件中读取数据并将其插入MySQL数据库。

最初一切都很顺利(我的sql知识一团糟,但我正在尝试(:

LOAD DATA INFILE 'filename.csv' INTO TABLE tablename 
FIELDS TERMINATED BY ';' LINES TERMINATED BY ''r'n' IGNORE 1 LINES

但是最近我必须验证文件中的哪些列将插入到 de 数据库中,所以我尝试了这样的事情:

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"部分,该命令工作正常,但我不明白为什么这会弄乱其他所有内容。我认为这是一些语法错误,但我尝试了我能想到的一切,但仍然没有任何效果。有人知道吗?

编辑:如果我保留"忽略 1 行",我会得到"您的 SQL 语法有错误;检查手册 yadda yadda yadda 在第 1 行的"忽略 1 行"附近使用。

为了测试,我使用的是一个简单的文件,这是前 5 行:

col1;col2;col3;col4;col5测试;测试;测试;测试;测试测试 2;测试 2;测试 2;测试 2;测试 2测试3;测试3;测试3;测试3;测试3测试4;测试4;测试4;测试4;测试4;测试4

加载数据文件:跳过列时不能忽略第一行

从语法上讲,您的陈述是正确的,应该按预期工作。

MySQL>创建表表名    -> (    -> Col1 瓦尔查尔(32(,    -> Col2 瓦尔查尔(32(,    -> col3 瓦尔查尔(32(,    -> Col4 瓦尔查尔(32(,    -> COL5 瓦尔查尔(32(    -> );查询正常,0 行受到影响(0.03 秒(mysql> LOAD DATA INFILE '/tmp/filename.csv'    ->到表中的表名    ->以";"结尾的字段    ->行以"'"结尾 - 我在Mac上,所以我使用'而不是''r'    -> 忽略 1 行    -> (@col1, @col2, @col3, @ignore, @ignore(    -> 设置col1 = @col1,col2 = @col2,col3 = @col3    -> ;查询正常,受影响的 4 行(0.01 秒(记录: 4 已删除: 0 跳过: 0 警告: 0MySQL>从表名中选择*;+-------+-------+-------+------+------+|Col1 |Col2 |COL3 |COL4 |COL5 |+-------+-------+-------+------+------+|测试 |测试 |测试 |空 |空 ||测试2 |测试2 |测试2 |空 |空 ||测试3 |测试3 |测试3 |空 |空 ||测试4 |测试4 |测试4 |空 |空 |+-------+-------+-------+------+------+4 行(0.00 秒(

现在,由于您收到语法错误,我的猜测是问题很可能不在于LOAD DATA语句本身,而在于用于构建和执行查询字符串的 C# 代码。

我遇到了同样的问题。 事实证明,在IGNORELINES之间,我不知何故有一个不可见的字符,而不仅仅是空格[1]。

擦除该行并再次写入解决了问题。

<小时 />

[1] 除了非打印控制字符外,还有几个不可见的 Unicode 标点字符。