Saya tidak terlalu paham dengan masalah konversi Unicode, tetapi saya telah melakukan ini pada diri saya sendiri sebelumnya, dan saya akan menunjukkan apa yang menurut saya sedang terjadi.
Saya percaya apa yang Anda lihat di sini bukan masalah memuat karakter khusus dengan nzload, melainkan masalah bagaimana tampilan/perangkat lunak terminal Anda menampilkan data dan/atau Netezza bagaimana cara menyimpan data karakter. Saya menduga konversi ganda ke/dari UTF-8 (pengkodean Unicode yang didukung Netezza). Mari kita lihat apakah kita bisa mencari tahu yang mana.
Di sini saya menggunakan Putty dengan Set Karakter Jarak Jauh default (untuk saya) sebagai 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¿
Di sini kita bisa melihat dari od bahwa file tersebut hanya memiliki data yang kita harapkan, namun ketika kita cat file kita melihat karakter tambahan. Jika tidak ada dalam file, kemungkinan karakter tersebut berasal dari terjemahan tampilan.
Jika saya mengubah pengaturan Putty agar UTF-8 menjadi set karakter jarak jauh, kita melihatnya seperti ini:
$ 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¿
Jadi, sumber data yang sama, tetapi dua representasi di layar yang berbeda, yang, tidak secara kebetulan, sama dengan dua keluaran Anda yang berbeda. Data yang sama dapat ditampilkan setidaknya dengan dua cara.
Sekarang mari kita lihat bagaimana ia dimuat ke Netezza, sekali ke dalam kolom VARCHAR, dan sekali lagi ke dalam kolom 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
Data dimuat tanpa kesalahan. Perhatikan saat saya menentukan opsi escapechar untuk nzload , tidak ada karakter dalam sampel data masukan khusus ini yang memerlukan pelolosan, juga tidak pelolosan.
Sekarang saya akan menggunakan fungsi rawtohex dari SQL Extension Toolkit sebagai alat dalam database seperti yang kita gunakan od dari baris perintah.
select rawtohex(col1) from test_enc_vchar;
RAWTOHEX
------------------------------
50524F46455353494F4E414CC2BF
(1 row)
select rawtohex(col1) from test_enc_nvchar;
RAWTOHEX
------------------------------
50524F46455353494F4E414CC2BF
(1 row)
Pada titik ini kedua kolom tampaknya memiliki data yang persis sama dengan file input. Sejauh ini, sangat baik.
Bagaimana jika kita memilih kolom? Sebagai catatan, saya melakukan ini dalam sesi Putty dengan rangkaian karakter jarak jauh UTF-8.
select col1 from test_enc_vchar;
COL1
----------------
PROFESSIONAL¿
(1 row)
select col1 from test_enc_nvchar;
COL1
---------------
PROFESSIONAL¿
(1 row)
Data biner yang sama, tetapi tampilan yang berbeda. Jika saya kemudian menyalin output dari masing-masing pilihan tersebut ke echo disalurkan ke od ,
$ 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
Berdasarkan keluaran ini, saya bertaruh Anda memuat data sampel Anda, yang juga saya pertaruhkan adalah UTF-8, ke dalam kolom VARCHAR daripada kolom NVARCHAR. Ini sendiri bukan masalah, tetapi dapat memiliki masalah tampilan/konversi di telepon.
Secara umum, Anda ingin memuat data UTF-8 ke dalam kolom NVARCHAR.