Я пытаюсь импортировать CSV, предоставленный службой, которая должна предоставить мне базу данных городов .

Формат городов в формате csv:

CC_FIPS FULL_NAME_ND
AN  Aixas

AN  Aixirivall

AN  Aixovall

AN  Andorra la Vella

AN  Ansalonga

Итак, я придумал следующий запрос mysql:

LOAD DATA LOCAL
INFILE 'GEODATASOURCE-CITIES-FREE.TXT'
INTO TABLE `city`
FIELDS TERMINATED BY '\t'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES
(cc_fips,full_name_nd);

Все они импортируются, но записи в столбце full_name_nd имеют пробел после. Поскольку, как вы можете видеть, в конце каждой строки есть лишний \r\n.

Что я могу подтвердить с помощью cat short.txt | od -c

0000000   C   C   _   F   I   P   S  \t   F   U   L   L   _   N   A   M
0000020   E   _   N   D  \r  \n   A   N  \t   A   i   x   a   s  \r  \n
0000040  \r  \n   A   N  \t   A   i   x   i   r   i   v   a   l   l  \r
0000060  \n  \r  \n   A   N  \t   A   i   x   o   v   a   l   l  \r  \n
0000100  \r  \n   A   N  \t   A   n   d   o   r   r   a       l   a
0000120   V   e   l   l   a  \r  \n  \r  \n   A   N  \t   A   n   s   a
0000140   l   o   n   g   a  \r  \n  \r  \n   A   N  \t   A   n   y   o
0000160   s  \r  \n  \r  \n   A   N  \t   A   r   a   n   s  \r  \n  \r
0000200  \n   A   N  \t   A   r   i   n   s   a   l  \r  \n  \r  \n   A
0000220   N  \t   A   u   b   i   n   y   a  \r  \n  \r  \n   A   N  \t

Итак, изменив запрос, используя \r\n\r\n:

LOAD DATA LOCAL
INFILE 'GEODATASOURCE-CITIES-FREE.TXT'
INTO TABLE `city`
FIELDS TERMINATED BY '\t'
LINES TERMINATED BY '\r\n\r\n'
IGNORE 1 LINES
(cc_fips,full_name_nd);

Но этот запрос не сработает :(

Query OK, 0 rows affected (0.40 sec)
Records: 0  Deleted: 0  Skipped: 0  Warnings: 0

Я даже пробовал с

LOAD DATA LOCAL
INFILE 'GEODATASOURCE-CITIES-FREE.TXT'
INTO TABLE `city`
FIELDS TERMINATED BY '\t'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES
(cc_fips,@col_with_spaces)
SET full_name_nd = TRIM(@col_with_spaces);

Но очевидно, что TRIM() не работает с \r, \n или другими специальными пробелами.

Надеюсь, кто-нибудь сможет помочь.

С Уважением,

0
arvil 23 Окт 2018 в 15:46

2 ответа

Лучший ответ

РЕШЕНО. с помощью инструмента dos2unix на 'GEODATASOURCE-CITIES-FREE.TXT', прежде чем использовать SQL-запрос, который я опубликовал в своем вопросе, решил это. С нетерпением ждем всех, кто сможет объяснить, почему преобразование его в окончание строки unix решило эту проблему.

1
arvil 24 Окт 2018 в 09:41

Не уверен, что это сработает, поскольку я не тестировал это, но пробовали ли вы заменить специальные символы. Что-то вроде этого:

LOAD DATA LOCAL
INFILE 'GEODATASOURCE-CITIES-FREE.TXT'
INTO TABLE `city`
FIELDS TERMINATED BY '\t'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES
(cc_fips,@col_with_spaces)
SET full_name_nd = TRIM(REPLACE(@col_with_spaces, '\r\n', ''));

Если это не сработает, попробуйте использовать '\ n' вместо '\ r \ n'.

1
Hendrik Prinsloo 23 Окт 2018 в 14:43
52949467