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

Perbedaan antara literal N'String' vs U'String' di Oracle

Dalam jawaban ini saya akan mencoba memberikan informasi dari sumber resmi

(1) Literal teks N''

N'' digunakan untuk mengonversi string menjadi NCHAR atau NVARCHAR2 tipe data

Menurut dokumentasi Oracle ini Oracle - Literals

Sintaks literal teks adalah sebagai berikut:

dimana N atau n menentukan literal menggunakan set karakter nasional (NCHAR atau NVARCHAR2 data).

Juga di artikel kedua ini Oracle - Tipe Data

N'String' digunakan untuk mengonversi string menjadi NCHAR tipe data

Dari artikel yang tercantum di atas:

Contoh berikut membandingkan translated_description kolom pm.product_descriptions tabel dengan string set karakter nasional :

SELECT translated_description FROM product_descriptions
  WHERE translated_name = N'LCD Monitor 11/PM';

(2) The U'' Literal

U'' digunakan untuk menangani SQL NCHAR String Literals di Oracle Call Interface (OCI)

Berdasarkan dokumentasi Oracle ini Pemrograman dengan Unicode

Antarmuka Panggilan Oracle (OCI) adalah API level terendah yang digunakan oleh produk akses database sisi klien lainnya. Ini menyediakan cara yang fleksibel untuk program C/C++ untuk mengakses data Unicode yang disimpan dalam SQL CHAR dan NCHAR tipe data. Dengan menggunakan OCI, Anda dapat secara terprogram menentukan set karakter (UTF-8, UTF-16, dan lainnya) untuk data yang akan dimasukkan atau diambil. Ia mengakses database melalui Oracle Net.

OCI adalah API tingkat terendah untuk mengakses database, sehingga menawarkan kinerja terbaik.

Menangani Literal String SQL NCHAR di OCI

Anda dapat mengaktifkannya dengan menyetel variabel lingkungan ORA_NCHAR_LITERAL_REPLACE ke TRUE . Anda juga dapat mencapai perilaku ini secara terprogram dengan menggunakan OCI_NCHAR_LITERAL_REPLACE_ON dan OCI_NCHAR_LITERAL_REPLACE_OFF mode di OCIEnvCreate() dan OCIEnvNlsCreate() . Jadi, misalnya, OCIEnvCreate(OCI_NCHAR_LITERAL_REPLACE_ON) menyalakan NCHAR penggantian literal, sedangkan OCIEnvCreate(OCI_NCHAR_LITERAL_REPLACE_OFF) mematikannya.

[...] Perhatikan bahwa, ketika NCHAR penggantian literal diaktifkan, OCIStmtPrepare dan OCIStmtPrepare2 akan mengubah N' literal dengan U' literal dalam teks SQL dan menyimpan teks SQL yang dihasilkan dalam pegangan pernyataan . Jadi, jika aplikasi menggunakan OCI_ATTR_STATEMENT untuk mengambil teks SQL dari OCI pegangan pernyataan, teks SQL akan mengembalikan U' bukannya N' sebagaimana ditentukan dalam teks asli .

(3) Jawaban untuk pertanyaan Anda

Dari perspektif tipe data, tidak ada perbedaan antara kedua kueri yang disediakan



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ORA-08177:tidak dapat membuat serial akses untuk transaksi ini

  2. ORACLE SQL:Isi tanggal yang hilang

  3. Oracle SQL - Identifikasi rentang nilai berurutan

  4. Menentukan Tanggal Paskah untuk Setiap Tahun di Oracle PLSQL

  5. Percepat operasi penyisipan massal dengan NHibernate