MySQL LOAD DATA INFILE с полями, оканчивающимися не-ASCII символом - PullRequest
0 голосов
/ 21 октября 2011

У меня есть файл в нижнем регистре thorn , который мне нужно загрузить в базу данных MySQL (5.1.54) с помощью запроса LOAD DATA INFILE ....

Файл, который я пытаюсь загрузить, находится на том же сервере, что и база данных MySQL, и я отправляю запрос с компьютера с Windows, используя SQLYog , который использует клиентскую библиотеку MySQL C.

У меня возникли серьезные проблемы, я попытался использовать синтаксис FIELDS TERMINATED BY 0x00FE, используя все варианты символа thorn , которые я могу придумать, и я попытался изменить набор символов соединение (SET NAMES ...), но я постоянно получаю предупреждение ...

Warning Code : 1638
Non-ASCII separator arguments are not fully supported

... и все данные загружаются в первый столбец.

Есть ли способ обойти это вообще? Или я смирился с предварительной обработкой файла sed, чтобы заменить все thorn на более разумный символ перед загрузкой?

Ответы [ 2 ]

0 голосов
/ 24 октября 2011

Я решил исправить файл, заменив не-ASCII-символ на символ, который будет понимать LOAD DATA INFILE ... MySQL.

  1. Используйте od, чтобы получить значение восьмеричного байтаоскорбительный символ - od -b file.log - в данном случае это 376.

  2. Используйте grep, чтобы убедиться, что символ, которым вы хотите заменить его, еще не существует вфайл - grep -n '|' file.log.

  3. Используйте sed и printf для замены не-ASCII символа - sed -i 's/'$(printf '\376')'/|/g' file.log.

0 голосов
/ 21 октября 2011

Мне удалось загрузить эти данные с помощью инструмента импорта данных (в формате CSV) в dbForge Studio for MySQL . Я просто установил 'Þ' как пользовательский разделитель. Импорт из формата CSV полностью поддерживается в бесплатной версии Express Edition.

...