Использование MySQL LOAD DATA INFILE с непечатаемыми символьными разделителями

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

5 ответов

Решение

Я понял.

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);

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

Если вы используете mysqlimport, то формат для шестнадцатеричных значений в fields-terminated-by, lines-terminated-by и т. Д.:

mysqlimport --local --user = имя пользователя --password=secret --ignore-lines=4 - набор символов по умолчанию =UTF8 --fields-terminated-by=0x01 --lines-terminated-by=0x02 - подробное имя базы данных

ПОЛЯ, ПРЕКРАЩЕННЫЕ X'01'

работает для меня

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

Другие вопросы по тегам