Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Menggunakan nzload untuk memuat karakter khusus

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.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nilai dari baris terakhir yang dimasukkan dalam DB

  2. Berikan izin dari satu pengguna ke pengguna lain di Oracle

  3. ADO.NET untuk menghubungkan Oracle Database di server

  4. Bagaimana cara menggunakan Parameter Array/Tabel ke Oracle (ODP.NET 10g) melalui ADO.NET/C#?

  5. Menggunakan tampilan tanpa kunci utama dengan Entitas