2009-09-29 6 views
2

У меня есть некоторые данные поставщика, у которого есть SOH (символ ASCII 1) в качестве разделителя полей и STX (символ ASCII 2) в качестве разделителя записей. Возможно ли загрузить эти данные с помощью LOAD DATA INFILE без предварительной обработки файла и замены этих символов чем-то более распространенным?Использование MySQL LOAD DATA INFILE с непечатаемыми разделителями символов

+1

woa, какая странная cirmumstance! :) – markus

+0

hah .. расскажи мне об этом ... иногда я ненавижу продавцов :) – danb

ответ

6

У меня есть.

LOAD DATA LOCAL INFILE 'myfile.txt' INTO TABLE my_table 
    CHARACTER SET UTF8 
    FIELDS TERMINATED BY X'01' 
    LINES TERMINATED BY X'02' 
    (col1, col2, col3); 
+1

Замечательно, что это работает - я не ожидал, что синтаксический анализатор примет что-либо, кроме буквенного символа после «TERMINATED BY». В качестве справочной информации документы по этому адресу находятся по адресу http://dev.mysql.com/doc/refman/5.1/en/hexadecimal-values.html. –

1

Вы можете попробовать FIELDS TERMINATED BY _ascii 0x02. Я не знаю, будет ли он работать для LOAD DATA INFILE, но он работает в SELECT (т. Е. SELECT _ascii 0x61 дает «a»).

+0

Я был взволнован в течение секунды, но это не сработало .. LOAD DATA хочет строку литерала ... Наверное, мне нужно предварительно -process .. thanks – danb

0

Вы можете попробовать просто отправить символ ascii непосредственно внутри строкового литерала .. если ваше соединение не имеет кодировки или кодировки, то mysql может просто принять его как допустимую строку. Вам нужно будет сделать это через сетевое соединение или передать данные в клиент mysql. Я не думаю, что вы сможете набрать это на консоли.

1

Если вы используете mysqlimport формат шестнадцатеричных значений в полях завершающего-на и линию завершающей-ЕТЦ является:

mysqlimport --local --user = имя пользователя --password = секрет --ignore линии = 4 --default-символьный набор = UTF8 --fields с концевым-с = 0x01 --lines с концевым-с = 0x02 --verbose DatabaseName thefiletoimport

0

ПОЛЕ TERMINATED BY X '01'

works for me