如何避免将csv文件中的数据导入MySQL表时创建空格

问题描述 投票:3回答:2

[嗨,我正在将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%';

is giving the expected results.

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
mysql sql csv
2个回答
2
投票

通常,我主张将数据加载到所有列均为字符串的登台表中,然后在数据库中进行清理。

但是,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]', '')

1
投票

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

UPDATE db.Mapping SET floor = trim(floor);
© www.soinside.com 2019 - 2024. All rights reserved.