MySQL / 10. Импорт и экспорт данных

Использование кавычек и специальных символов

Задача
Ваш файл данных содержит значения, заключенные в кавычки, или экранированные символы.

Решение
В предложении LOAD DATA укажите, что определенные символы не должны загружаться в базу данных необработанными.

Обсуждение
Кроме опции TERMINATED BY в инструкции FIELDS могут присутствовать и другие спецификаторы формата. По умолчанию LOAD DATA считает, что значения не заключены в кавычки, и интерпретирует обратный слэш (\) как экранирующий символ для специальных символов. Для явного определения символов, исполняющих роль кавычек, используйте опцию ENCLOSED BY; MySQL в процессе ввода отбросит указанные символы, если встретит их в начале или в конце значения данных. Для изменения значения экранирующего символа используйте опцию ESCAPED BY.Эти три опции инструкции FIELDS (ENCLOSED BY, ESCAPED BY и TERMINATED BY) могут следовать в любом порядке, если вы используете более, чем одну из них. Например, следующие инструкции FIELDS эквивалентны:

FIELDS TERMINATED BY ',' ENCLOSED BY '"'
FIELDS ENCLOSED BY '"' TERMINATED BY ','

Значение, определяемое опцией TERMINATED BY, может состоять из нескольких символов. Если значения данных внутри строк разделены чем-то вроде *@*, вы можете написать так:

FIELDS TERMINATED BY '*@*'

Для полной отмены экранирования укажите пустое значение экранирующей последовательности:

FIELDS ESCAPED BY ''

Если чс помощью ENCLOSED BY вы указываете, что значения данных должны быть очищены от ограничивающих символов, то для включения их литеральных значений в данные их нужно продублировать или предварить экранирующим символом. Например, если в качестве кавычек и экранирующего символа используются " и \, исходное значение "a""b\"c" будет интерпретировано как a"b"c.

Для утилиты mysqlimport соответствующие параметры командной строки для определения кавычек и экранирования называются --fields-enclosed-by и --fields-escaped-by. (Используя опции mysqlimport, содержащие кавычки и обратный слэш, которые могут иметь специальное значение в командном интерпретаторе, помните о необходимости помещать в кавычки или экранировать кавычки и символы экранирования!)

Статьи по MySQL на эту тему:

Диагностическая утилита для LOAD DATA
Извлечение и перестановка столбцов файлов данных
Импорт XML в MySQL
Импорт файлов в формате CSV
Использование временных таблиц для преобразования дат

Вернуться в раздел: MySQL / 10. Импорт и экспорт данных