Я не очень разбираюсь в вопросах преобразования Юникода, но я сделал это для себя раньше, и я продемонстрирую, что я думаю, что происходит.
Я считаю, что то, что вы видите здесь, не является проблемой при загрузке специальных символов с помощью 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.
Был ли ¿сбежал, когда он был загружен? Можете ли вы получить те же результаты с внешней таблицей? –