加载数据文件:跳过列时不能忽略第一行
本文关键字:一行 不能 文件 数据 加载 | 更新日期: 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# 代码。
我遇到了同样的问题。 事实证明,在IGNORE
和LINES
之间,我不知何故有一个不可见的字符,而不仅仅是空格[1]。
擦除该行并再次写入解决了问题。
<小时 />[1] 除了非打印控制字符外,还有几个不可见的 Unicode 标点字符。