#mysql #sql #csv #mysql-workbench
#mysql #sql #csv #mysql-workbench
Вопрос:
Используя MySQL на Mac OSX и выполнив SQL с помощью MySQL Workbench, вот SQL-запрос и содержимое csv-файла, я хочу ввести строку в кавычках, например, я хочу ввести f"o"o
, я пытался использовать f"o"o
, но, похоже, не работает, есть идеи, как импортировать с кавычками для столбца в csv-файле?
SQL-запрос,
LOAD DATA LOCAL INFILE '/Users/foo/Downloads/import.csv'
INTO TABLE tasks
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY 'n';
Схема таблицы,
create database exercise;
CREATE TABLE IF NOT EXISTS tasks (
task_id INT(11) NOT NULL AUTO_INCREMENT,
subject VARCHAR(45) DEFAULT NULL,
start_date DATE DEFAULT NULL,
end_date DATE DEFAULT NULL,
description VARCHAR(200) DEFAULT NULL,
PRIMARY KEY (task_id)
Содержимое CSV-файла,
1,"hello/world",,,"f"o"o"
2,"hello/world",,,"g"o"o"
3,"hello/world",,,"z"o"o"
Содержимое после импорта,
SELECT * FROM exercise.tasks;
Редактировать 1,
Пытался использовать двойные кавычки для кодирования цитаты, попробовал этот способ, после импорта все так же, как снимок экрана, который я опубликовал.
1,"hello/world",,,"f""o""o"
2,"hello/world",,,"g""o""o"
3,"hello/world",,,"z""o""o"
Редактировать 2, пробовал это, но не работает (после импорта это foo
отличается от f o
o)
1,"hello/world",,,f'o'o
2,"hello/world",,,g'o'o
3,"hello/world",,,z'o'o
Отредактируйте 3, попробовал это и также не работает (после импорта это foo
отличается от f o
o)
1,"hello/world",,,"f''o''o"
2,"hello/world",,,"g'o''o"
3,"hello/world",,,"z''o''o"
Отредактируйте 4, предупреждение, которое я вижу,
LOAD DATA LOCAL INFILE '/Users/foo/Downloads/import.csv' INTO TABLE tasks FIELDS TERMINATED BY ',' ENCLOSED BY '"' ESCAPED BY '\' LINES TERMINATED BY 'n' 3 row(s) affected, 6 warning(s): 1265 Data truncated for column 'start_date' at row 1 1265 Data truncated for column 'end_date' at row 1 1265 Data truncated for column 'start_date' at row 2 1265 Data truncated for column 'end_date' at row 2 1265 Data truncated for column 'start_date' at row 3 1265 Data truncated for column 'end_date' at row 3 Records: 3 Deleted: 0 Skipped: 0 Warnings: 6
с уважением,
Лин
Ответ №1:
Удвоение заключающего символа действительно должно сработать. Может быть, есть другая проблема, из-за которой ваш импорт завершается неудачей? Проверьте также с помощью необработанного текстового вывода ( Query -> Execute .. to Text
) или с помощью клиента командной строки.
В качестве альтернативы вы могли бы использовать другой заключающий символ. Как насчет использования одинарной кавычки вместо этого? Если у вас в тексте нет запятых (т. Е. символа, используемого в качестве ограничителя поля), вы можете полностью опустить заключающий символ (поскольку в этом случае ограничителя поля было бы достаточно для разделения записей).
Комментарии:
1. Привет, Майк, я попробовал ваш метод
Query -> Execute .. to Text
, а также попытался удалить двойные кавычки в начале и конце, но ни один из способов не работает. Я публикую Edit 2 и Edit 3, я также замечаю предупреждение, размещенное там, и не уверен, связано ли это с этой проблемой? Вы упомянули клиент командной строки? Вы имеете в виду какие-то инструменты для импорта csv-файла или просто выполнение SQL-запроса?2. Кстати, если вы попробуете мой опубликованный простой файл import.csv, сработает ли он у вас?
3. Спасибо, Майк, я выяснил, что на моей стороне есть проблема, я исправил ее, тогда ваше решение работает. Отметьте свой ответ как ответ и проголосуйте.
Ответ №2:
Вы должны удвоить двойные кавычки, чтобы избежать их: f""o""o
Чтобы избежать двусмысленности, вхождения символа ENCLOSED BY в значении поля могут быть удвоены и интерпретироваться как единственный экземпляр символа.
Комментарии:
1. Привет, Scarabee, попробовал ваш метод, не работает, смотрите раздел моего обновления Edit 1.