У меня есть некоторые данные поставщика, у которого есть SOH (символ ASCII 1) в качестве разделителя полей и STX (символ ASCII 2) в качестве разделителя записей. Возможно ли загрузить эти данные с помощью LOAD DATA INFILE без предварительной обработки файла и замены этих символов чем-то более распространенным?Использование MySQL LOAD DATA INFILE с непечатаемыми разделителями символов
ответ
У меня есть.
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);
Замечательно, что это работает - я не ожидал, что синтаксический анализатор примет что-либо, кроме буквенного символа после «TERMINATED BY». В качестве справочной информации документы по этому адресу находятся по адресу http://dev.mysql.com/doc/refman/5.1/en/hexadecimal-values.html. –
Вы можете попробовать FIELDS TERMINATED BY _ascii 0x02
. Я не знаю, будет ли он работать для LOAD DATA INFILE
, но он работает в SELECT
(т. Е. SELECT _ascii 0x61
дает «a»).
Я был взволнован в течение секунды, но это не сработало .. LOAD DATA хочет строку литерала ... Наверное, мне нужно предварительно -process .. thanks – danb
Вы можете попробовать просто отправить символ ascii непосредственно внутри строкового литерала .. если ваше соединение не имеет кодировки или кодировки, то mysql может просто принять его как допустимую строку. Вам нужно будет сделать это через сетевое соединение или передать данные в клиент mysql. Я не думаю, что вы сможете набрать это на консоли.
Если вы используете mysqlimport формат шестнадцатеричных значений в полях завершающего-на и линию завершающей-ЕТЦ является:
mysqlimport --local --user = имя пользователя --password = секрет --ignore линии = 4 --default-символьный набор = UTF8 --fields с концевым-с = 0x01 --lines с концевым-с = 0x02 --verbose DatabaseName thefiletoimport
ПОЛЕ TERMINATED BY X '01'
works for me
woa, какая странная cirmumstance! :) – markus
hah .. расскажи мне об этом ... иногда я ненавижу продавцов :) – danb