mysql не может импортировать строки csv, оканчивающиеся на \ r \ n \ r \ n, используя локальные данные загрузки - PullRequest
0 голосов
/ 23 октября 2018

Я пытаюсь импортировать 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 или других специальных пробелах.

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

С уважением,

Ответы [ 2 ]

0 голосов
/ 24 октября 2018

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

0 голосов
/ 23 октября 2018

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

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.

...