2015-12-30 3 views
1

У меня есть расширенные символы ascii в данных таблицы Oracle, которые я могу извлечь в файл с использованием sqlplus с префиксом \ escape-символом. Я хочу использовать nzload для загрузки одних и тех же данных в таблицу netezza.Использование nzload для загрузки специальных символов

nzload добавляет несколько дополнительных байтов, когда он сталкивается с этим обугленного SEQ (c2bf) в извлекаемых данных файла:

echo "PROFESSIONAL¿" | od -x 
0000000 5052 4f46 4553 5349 4f4e 414c **c2bf** 0a00 

после nzload:

echo "PROFESSIONAL¿" | od -x 
0000000 5052 4f46 4553 5349 4f4e 414c **c382 c2bf** 

в командной nzload линии, У меня есть следующие варианты: -escapechar \ -ctrlchars

Может ли кто-нибудь помочь в этом?

+0

Был ли ¿сбежал, когда он был загружен? Можете ли вы получить те же результаты с внешней таблицей? –

ответ

0

Я не очень разбираюсь в вопросах преобразования Юникода, но я сделал это для себя раньше, и я продемонстрирую, что я думаю, что происходит.

Я считаю, что то, что вы видите здесь, не является проблемой при загрузке специальных символов с помощью nzload, скорее это проблема с тем, как ваше программное обеспечение дисплея/терминала отображает данные и/или Netezza, как хранится символьная информация. Я подозреваю двойное преобразование в/из UTF-8 (кодировка Unicode, поддерживаемая Netezza). Посмотрим, сможем ли мы разобраться, что это такое.

Здесь я использую PuTTY с по умолчанию (для меня) Удаленный набор символов как Latin-1.

$ od -xa input.txt 
0000000 5250 464f 5345 4953 4e4f 4c41 bfc2 000a 
      P R O F E S S I O N A L B ? nl 
0000017 

$ cat input.txt 
PROFESSIONAL¿ 

Здесь мы можем видеть из оды, что файл содержит только данные, которые мы ожидаем, однако, когда мы кота файла, который мы видим дополнительный символ. Если его нет в файле, то, скорее всего, этот символ исходит из перевода отображения.

Если изменить настройки PuTTY, чтобы иметь UTF-8 -множество удаленный характер, мы видим, что этот путь:

$ od -xa input.txt 
0000000 5250 464f 5345 4953 4e4f 4c41 bfc2 000a 
      P R O F E S S I O N A L B ? nl 
0000017 
$ cat input.txt 
PROFESSIONAL¿ 

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

Теперь посмотрим, как он загружается в Netezza, один раз в столбце VARCHAR и снова в колонку NVARCHAR.

create table test_enc_vchar (col1 varchar(50)); 
create table test_enc_nvchar (col1 nvarchar(50)); 

$ nzload -db testdb -df input.txt -t test_enc_vchar -escapechar '\' -ctrlchars 
Load session of table 'TEST_ENC_VCHAR' completed successfully 
$ nzload -db testdb -df input.txt -t test_enc_nvchar -escapechar '\' -ctrlchars 
Load session of table 'TEST_ENC_NVCHAR' completed successfully 

Данные не загружены. Обратите внимание, в то время как я указываю опцию escapechar для nzload, ни один из символов этого конкретного образца входных данных не требует экранирования, и они не экранируются.

Теперь я буду использовать функцию rawtohex из SQL Extension Toolkit в качестве инструмента в базе данных, например, мы использовали od из командной строки.

select rawtohex(col1) from test_enc_vchar; 
      RAWTOHEX 
------------------------------ 
50524F46455353494F4E414CC2BF 
(1 row) 

select rawtohex(col1) from test_enc_nvchar; 
      RAWTOHEX 
------------------------------ 
50524F46455353494F4E414CC2BF 
(1 row) 

На данный момент оба столбца имеют точно такие же данные, как и входной файл. Все идет нормально.

Что делать, если мы выберем столбец? Для записи я делаю это в сеансе PuTTY с удаленным набором символов UTF-8.

select col1 from test_enc_vchar; 
     COL1 
---------------- 
PROFESSIONAL¿ 
(1 row) 

select col1 from test_enc_nvchar; 
    COL1 
--------------- 
PROFESSIONAL¿ 
(1 row) 

Такие же двоичные данные, но разные дисплеи. Если я затем скопировать выход каждого из этих выбирает в эхо конвейеру к спосо,

$ echo PROFESSIONAL¿ | od -xa 
0000000 5250 464f 5345 4953 4e4f 4c41 82c3 bfc2 
      P R O F E S S I O N A L C stx B ? 
0000020 000a 
     nl 
0000021 

$ echo PROFESSIONAL¿ | od -xa 
0000000 5250 464f 5345 4953 4e4f 4c41 bfc2 000a 
      P R O F E S S I O N A L B ? nl 
0000017 

Основываясь на этом выводе, Держу пари, что вы загружаете данные примеры, которые я бы также ставка UTF-8, в столбце VARCHAR, а не в столбце NVARCHAR. Это само по себе не проблема, но может иметь проблемы с отображением/преобразованием.

Вообще говоря, вы хотите загрузить данные UTF-8 в столбцы NVARCHAR.

+0

Спасибо, конвертируется в работы NVARCHAR. –

Смежные вопросы