如何避免将数据从CSV文件导入MySQL表时创建白色

vulvrdjw  于 2023-07-31  发布在  Mysql
关注(0)|答案(2)|浏览(77)

我正在将数据从CSV文件导入MySQL表。当基本查询如

select * from Mapping where floor  = 'L1';

字符串
我不工作,经过很多斗争我发现,这是因为白色和查询

select * from Mapping where floor  like '%L1%';


给了我预期的结果
下面是我如何将CSV加载到表中:

LOAD DATA LOCAL INFILE "../.../mapping.csv" INTO TABLE db.Mapping
    FIELDS TERMINATED BY ','
    LINES TERMINATED BY '\n'   
    IGNORE 1 LINES


我不知道白色是从哪里来的。我是否以正确的方式加载CSV?有什么方法可以避免白色吗?

更新

我试过了,

Query OK, 0 rows affected (0.00 sec)                                                                                                                                
Rows matched: 49  Changed: 0  Warnings: 0


它说没有行受影响。

select * from Mapping where floor  = 'L1';


还是不行但是

select * from Mapping where floor  like '%L1%';


给出了预期的结果。
CSV文件数据:

V,M,Floor
1,15,L1
2,14,L1
3,14,L1
4,16,L1
5,16,L1
6,6,L1
7,14,L1
8,13,L1
9,12,L1
10,11,L1
11,16,L1

qojgxg4l

qojgxg4l1#

通常,我建议将数据加载到所有列都是字符串的staging表中,然后在数据库中进行清理。
但是,load data infile确实有一些很好的清理数据的功能。如果你的额外字符是空格,你可以使用trim()。关键是变量和SET

LOAD DATA LOCAL INFILE "../.../mapping.csv"
    INTO TABLE db.Mapping 
    FIELDS TERMINATED BY ','
    LINES TERMINATED BY '\n'   
    IGNORE 1 LINES
    (@floor, . . . )  -- list the rest of the columns here
    SET floor = TRIM(@floor);

字符串
如果错误更复杂,那么正则表达式很有用:

SET floor = REGEXP_REPLACE(@floor, '[^A-Z0-9]', '')

cgyqldqp

cgyqldqp2#

您可以在插入数据后始终修剪空白;

UPDATE db.Mapping SET floor = trim(floor);

字符串

相关问题