mysql - 如何避免在将数据从 csv 文件导入 MySQL 表时创建空格
问题描述
您好我正在将数据从 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
解决方案
通常,我主张将数据加载到所有列都是字符串的暂存表中,然后在数据库中进行清理。
但是,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]', '')
推荐阅读
- python - 如何修复“是否安装了 poppler 并在 PATH 中?” 在 R
- ssl - 在 Windows 上生成 cert.pem 和 key.pem
- ios - 如何使用 Timer 在 UITableView 内自动滚动 UICollectionView?
- java - 为了清楚起见,如何将 MainActivity 功能拆分为另一个类?
- scikit-learn - 在 GaussianMixture 中获取分量后验概率
- python - 更改 AxisArtist 上的刻度数
- java - 如何模拟带注释的类?
- bash - 使用 bash 进行单元测试:使 bash 函数调用未选中,同时让父函数在函数出错后继续?
- python - 使用函数切换帧
- c# - 尝试访问 DataGrid 单元内的 StackPanel