【发布时间】:2016-06-11 18:06:15
【问题描述】:
我有这个CSV file 大约有 16.916 条记录。当我将它加载到 MySQL 中时,它只检测到 15.945 条记录。 这就是 MySQL 所说的:
Records: 15945 Deleted: 0 Skipped: 0 Warnings: 0
谁能告诉我为什么 MySQL 会忽略一些记录以及如何解决这个问题?
我使用 LOAD 函数加载文件,如下所示:
LOAD DATA LOCAL INFILE 'germany-filtered.csv'
INTO TABLE point_of_interest
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES
(osm_id,lat,lng,access,addr_housename,addr_housenumber,addr_interpolation,admin_level,aerialway,aeroway,amenity,area,barrier,bicycle,brand,bridge,boundary,building,capital,construction,covered,culvert,cutting,denomination,disused,ele,embankment,foot,generator_source,harbour,highway,historic,horse,intermittent,junction,landuse,layer,leisure,ship_lock,man_made,military,motorcar,name,osm_natural,office,oneway,operator,place,poi,population,power,power_source,public_transport,railway,ref,religion,route,service,shop,sport,surface,toll,tourism,tower_type,tunnel,water,waterway,wetland,width,wood);
这就是我使用的数据库架构:
CREATE TABLE point_of_interest (
`poi_id` int(10) unsigned NOT NULL auto_increment,
`lat` DECIMAL(10, 8) default NULL,
`lng` DECIMAL(11, 8) default NULL,
PRIMARY KEY (`poi_id`),
KEY `lat` (`lat`),
KEY `lng` (`lng`),
osm_id BIGINT,
access TEXT,
addr_housename TEXT,
addr_housenumber TEXT,
addr_interpolation TEXT,
admin_level TEXT,
aerialway TEXT,
aeroway TEXT,
amenity TEXT,
area TEXT,
barrier TEXT,
bicycle TEXT,
brand TEXT,
bridge TEXT,
boundary TEXT,
building TEXT,
capital TEXT,
construction TEXT,
covered TEXT,
culvert TEXT,
cutting TEXT,
denomination TEXT,
disused TEXT,
ele TEXT,
embankment TEXT,
foot TEXT,
generator_source TEXT,
harbour TEXT,
highway TEXT,
historic TEXT,
horse TEXT,
intermittent TEXT,
junction TEXT,
landuse TEXT,
layer TEXT,
leisure TEXT,
ship_lock TEXT,
man_made TEXT,
military TEXT,
motorcar TEXT,
name TEXT,
osm_natural TEXT,
office TEXT,
oneway TEXT,
operator TEXT,
place TEXT,
poi TEXT,
population TEXT,
power TEXT,
power_source TEXT,
public_transport TEXT,
railway TEXT,
ref TEXT,
religion TEXT,
route TEXT,
service TEXT,
shop TEXT,
sport TEXT,
surface TEXT,
toll TEXT,
tourism TEXT,
tower_type TEXT,
tunnel TEXT,
water TEXT,
waterway TEXT,
wetland TEXT,
width TEXT,
wood TEXT
) ENGINE=InnoDB;
更新:
我已经检查了第一条和最后一条记录,但两者都存在。也确实存在具有很多这样的空值的记录:
1503898236,10.5271308,52.7468051,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
更新 2:
这些是我找到的数据库中缺少的记录:
4228380062,9.9386752,53.6135468,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,Dammwild,,,,,,,,,,,,,,,,,,,,attraction,,,,,,,
4228278589,9.9391503,53.5960304,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,Kaninchen,,,,,,,,,,,,,,,,,,,,attraction,,,,,,,
4228278483,9.9396935,53.5960729,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,Onager,,,,,,,,,,,,,,,,,,,,attraction,,,,,,,
4226772791,8.8394263,54.1354887,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,Familienlagune Perlebucht,,,,,,,,,,,,,,,,,,,,attraction,,,,,,,
似乎几乎所有以4 开头的osm_id 记录都丢失了。真奇怪。
【问题讨论】:
-
可能不是你想听到的,但知道哪些行被忽略了会很有趣。
-
我也想知道。我已经检查了第一条和最后一条记录,但两者都存在。我不想检查每条记录。
-
我用一些缺失的记录更新了问题。也许这有助于找到原因。
-
5条记录(Update 2)在小测试中加载到表中。
-
没错。此外,当我复制 CSV 文件中的所有记录时,MySQL 从 33832 条记录中识别出 31890 (=2x15945)。所以似乎 MySQL 并没有丢弃它们,因为它认为它们是重复的。
标签: mysql csv mysql-loadfile