MySQL LOAD DATA INFILE со специальными разделителями - PullRequest
1 голос
/ 23 мая 2011

У меня есть данные, поля которых уменьшены на \u0001, а записи - \u0002\n.Я хочу использовать LOAD DATA INFILE для импорта всех данных одновременно в базу данных MySQL.Я знаю, что \u0001 можно записать как X'01', но я не уверен, как написать `\ u0002 \ n '.

Это то, что у меня есть.

LOAD DATA LOCAL INFILE 'myfile.txt' INTO TABLE my_table 
    FIELDS TERMINATED BY X'01'
    LINES TERMINATED BY '\n'
    (col1, col2, col3);

Вышеприведенный оператор SQL работает, но я боюсь, что \u0002 может быть импортирован в базу данных вместе с данными.

Я знаю, что \u0002 можно записать как X'02', но я не слишком уверен, как можно объединить X'02' с \n.

Есть предложения?

1 Ответ

8 голосов
/ 03 февраля 2013

Похоже, вы пытаетесь реализовать iTunes EPF :), X'01' + '\n' => X'020a' Таким образом, ваш запрос может быть записан как:

LOAD DATA LOCAL INFILE 'myfile.txt' INTO TABLE my_table 
    FIELDS TERMINATED BY X'01'
    LINES TERMINATED BY X'020a'
    (col1, col2, col3);

Если вы действительно работаете над реализацией интеграции iTunes EPF, вы можете использовать следующий запрос:

LOAD DATA LOCAL INFILE '<path to your file>' INTO TABLE `<table name>` CHARACTER SET UTF8MB4 FIELDS TERMINATED BY X'01' LINES TERMINATED BY X'020a' IGNORE 34 LINES;

Например, Apple предоставляет текстовые данные в 4-байтовом UTF8, которые могут храниться в MySQL только с кодировкой UTF8MB4 (я имею в виду исправить порт для всех текстовых записей). Первые 34 строки будут игнорироваться (как и должно быть - это данные «правовой политики»). и нужно удалить последнюю строку из файла. (Я удаляю его скриптом перед портированием)

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

...