Как убрать двойные кавычки из внутреннего значения при импорте CSV в таблицу mysql - PullRequest
1 голос
/ 14 марта 2020

Я использую здесь код для импорта CSV в таблицу mysql. Он прекрасно работает и ENCLOSED BY удаляет любые двойные кавычки.

Мои значения CSV похожи на «текстовый текст», 123, «текстовый текст», 456, «текстовый текст»

LOAD DATA LOCAL INFILE "'.$file.'"
INTO TABLE '.$table.'
FIELDS TERMINATED by \',\'
OPTIONALLY ENCLOSED BY \'"\'
ESCAPED BY \'"\'
LINES TERMINATED BY \'\r\n\'
(location,rating,board etc)

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

Как 3-й столбец здесь - «текстовый текст», 123, «текст» Специальный «текст», 456, «текстовый текст»

который импортирует как текстовый текст, 123, текст «Специальный» text, 456, text text

Я пробовал ESCAPED BY, как показано, но не могу заставить его удалить внутренние двойные кавычки. Это в среде wordpress, но приведенный выше код работает (кроме моей проблемы).

Любая идея, помощь или идеи будут великолепны.

Ответы [ 2 ]

0 голосов
/ 14 марта 2020

Вы показали нам эту строку из файла CSV

"text text",123,"text "Special" text",456,"text text"

К сожалению, это не правильно сформированный CSV. " символы внутри значений столбцов должны быть экранированы. Таким образом, чтобы эта строка была правильно сформирована, она должна выглядеть примерно так:

"text text",123,"text ""Special"" text",456,"text text"
"text text",123,"text \"Special\" text",456,"text text"

Если бы это был мой проект, я бы go вернулся туда, где получил этот плохой CSV-файл, и попытался бы получите хороший.

Если это невозможно, и в вашем файле нет запятых, встроенных в значения столбцов, вы можете попробовать эту команду загрузки, сняв условие OPTIONALLY ENCLOSED BY.

LOAD DATA LOCAL INFILE "'.$file.'"
INTO TABLE '.$table.'
FIELDS TERMINATED by \',\'
ESCAPED BY \'"\'
LINES TERMINATED BY \'\r\n\'
(location,rating,board etc)

Затем вы получите несколько строковых значений с символами " в начале и в конце. Вы можете исправить это с помощью таких запросов

UPDATE table SET field = SUBSTRING(field,2) WHERE field LIKE '"%';
UPDATE table SET field = SUBSTRING(field, 1, LENGTH(field)-1) WHERE field LIKE '%"';

Первый запрос снимает первые "знаки", а второй - завершающие.

0 голосов
/ 14 марта 2020

Попробуйте избежать двойных кавычек, как это:

LOAD DATA LOCAL INFILE "'.$file.'"
INTO TABLE '.$table.'
FIELDS TERMINATED by \',\'
OPTIONALLY ENCLOSED BY \'"\'
ESCAPED BY \'\'
LINES TERMINATED BY \'\r\n\'
(location,rating,board etc)

...