Sunting:Perhatikan bahwa cara terbaik untuk menangani UTF di Oracle adalah membuat database menggunakan kumpulan karakter database AL32UTF8, dan menggunakan kolom varchar2 biasa. Salah satu masalah dengan menggunakan kolom nchar adalah Oracle tidak dapat menggunakan indeks untuk kolom char/varchar2 biasa ketika argumen dikirim sebagai nchar secara default.
Pokoknya:Jika Anda tidak dapat mengonversi database:
Pertama, literal unicode perlu diawali dengan 'n', seperti ini:
select n'Language - Språk - Język' from dual;
*) Pengkodean 8-bit tidak dapat menangani teks ini
Sayangnya, itu tidak cukup.
Untuk beberapa alasan, perilaku default untuk klien basis data adalah menerjemahkan semua literal string ke kumpulan karakter basis data, artinya nilai akan diubah bahkan sebelum basis data melihat string.
Klien memerlukan beberapa konfigurasi agar dapat menyisipkan karakter unicode ke dalam kolom NCHAR atau NVARCHAR:
SQL Plus di Unix
Variabel environemnet ini mengatur lingkungan unix dan sqlplus untuk menggunakan file UTF-8, dan juga mengonfigurasi sqlplus untuk mengirim literal string dalam unicode.
NLS_LANG=AMERICAN_AMERICA.AL32UTF8
LC_CTYPE="en_US.UTF-8"
ORA_NCHAR_LITERAL_REPLACE=true
(en_US.UTF-8 untuk Solaris - Linux atau sistem lain mungkin memerlukan string yang berbeda, gunakan locale -a
untuk membuat daftar lokal yang didukung.)
Pengemudi JDBC
Aplikasi yang menggunakan driver Oracles JDBC harus memiliki properti sistem berikut yang ditentukan untuk mengirim string literal dalam unicode.
-Doracle.jdbc.defaultNChar=true
-Doracle.jdbc.convertNcharLiterals=true
Pengembang SQL
Cari sqldeveloper.conf, dan tambahkan baris berikut:
AddVMOption -Doracle.jdbc.defaultNChar=true
AddVMOption -Doracle.jdbc.convertNcharLiterals=true
SQL Plus di Microsoft Windows
Saya belum pernah mencoba apakah SQLplus di Microsoft Windows atau Toad menangani utf-8 sama sekali. Sqlplusw.exe dapat melakukannya, dan pengaturan registri berikut mungkin berhasil.
NLS_LANG=AMERICAN_AMERICA.AL32UTF8
ORA_NCHAR_LITERAL_REPLACE=true