цитата в csv-файле для импорта в MySQL

#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

Документ MySQL:

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

Комментарии:

1. Привет, Scarabee, попробовал ваш метод, не работает, смотрите раздел моего обновления Edit 1.