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

Memasukkan karakter nasional ke dalam kolom Oracle NCHAR atau NVARCHAR tidak berfungsi

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ketika memasukkan karakter persia di Oracle db saya melihat tanda tanya

  2. Cara Mendapatkan Nama Bulan dari Tanggal di Oracle

  3. SUBSTR() Fungsi di Oracle

  4. Referensi yang bagus untuk Oracle PL/SQL

  5. ORA-01219:basis data tidak terbuka:kueri diizinkan hanya pada tabel/tampilan tetap