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

perbedaan antara NLS_NCHAR_CHARACTERSET dan NLS_CHARACTERSET untuk Oracle

Secara umum semua poin Anda benar. NLS_NCHAR_CHARACTERSET mendefinisikan set karakter untuk NVARCHAR2 , et. Al. kolom sedangkan NLS_CHARACTERSET digunakan untuk VARCHAR2 .

Mengapa mungkin Anda melihat karakter Cina dengan US7ASCII ?

Alasannya adalah, set karakter database Anda dan set karakter klien Anda (yaitu lihat NLS_LANG nilai) keduanya US7ASCII . Basis data Anda menggunakan US7ASCII dan itu "berpikir" juga klien mengirim data menggunakan US7ASCII . Jadi itu tidak membuat konversi string, data ditransfer sedikit demi sedikit dari klien ke server dan sebaliknya.

Karena itu, Anda dapat menggunakan karakter yang sebenarnya tidak didukung oleh US7ASCII . Sadarilah, jika klien Anda menggunakan set karakter yang berbeda (misalnya ketika Anda menggunakan ODP.NET Managed Driver dalam aplikasi Windows) data akan menjadi sampah! Juga jika Anda akan mempertimbangkan migrasi kumpulan karakter basis data, Anda memiliki masalah yang sama.

Catatan lain:Saya tidak berpikir Anda akan mendapatkan perilaku yang sama dengan set karakter lain, mis. jika database Anda dan klien Anda akan menggunakan WE8ISO8859P1 Misalnya. Perlu diketahui juga bahwa Anda sebenarnya memiliki konfigurasi yang salah. Basis data Anda menggunakan kumpulan karakter US7ASCII , NLS_LANG . Anda nilainya juga US7ASCII (kemungkinan besar tidak disetel sama sekali dan Oracle default ke US7ASCII ) tetapi kumpulan karakter asli SQL*Plus, resp. cmd.exe Anda terminal kemungkinan besar adalah CP950 atau CP936.

Jika Anda ingin mengatur semuanya dengan benar, Anda dapat mengatur variabel lingkungan NLS_LANG=.ZHT16MSWIN950 (CP936 tampaknya tidak didukung oleh Oracle) atau ubah halaman kode Anda sebelum menjalankan sqlplus.exe dengan perintah chcp 437 . Dengan pengaturan yang tepat ini, Anda tidak akan melihat karakter Cina seperti yang mungkin Anda harapkan.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana mengubah Prioritas untuk Program Serentak

  2. Pisahkan fungsi di oracle ke nilai yang dipisahkan koma dengan urutan otomatis

  3. Apa yang harus dilakukan jika Anda tidak dapat membuka kesalahan file objek bersama saat menggunakan driver ODBC Oracle Easysoft versi OCI?

  4. Buat File PDF dengan PLSQL di Oracle

  5. Memutar Tabel dalam SQL (yaitu Tabulasi silang / tabulasi silang)