Oracle
 sql >> Database >  >> RDS >> Oracle

Differenza tra i letterali N'String' e U'String' in Oracle

In questa risposta cercherò di fornire informazioni dalle risorse ufficiali

(1) Il testo letterale N''

N'' viene utilizzato per convertire una stringa in NCHAR o NVARCHAR2 tipo di dati

Secondo questa documentazione Oracle Oracle - Letterali

La sintassi dei letterali di testo è la seguente:

dove N o n specifica il valore letterale utilizzando il set di caratteri nazionale (NCHAR o NVARCHAR2 dati).

Anche in questo secondo articolo Oracle - Datatypes

La N'String' viene utilizzato per convertire una stringa in NCHAR tipo di dati

Dall'articolo sopra elencato:

L'esempio seguente confronta la translated_description colonna di pm.product_descriptions tabella con una stringa del set di caratteri nazionale :

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

(2) La U'' Letterale

U'' viene utilizzato per gestire i valori letterali di stringa SQL NCHAR in Oracle Call Interface (OCI)

Basato su questa documentazione Oracle Programmazione con Unicode

L'interfaccia di chiamata Oracle (OCI) è l'API di livello più basso utilizzata dal resto dei prodotti di accesso al database lato client. Fornisce un modo flessibile per i programmi C/C++ per accedere ai dati Unicode archiviati in SQL CHAR e NCHAR tipi di dati. Utilizzando OCI, è possibile specificare a livello di codice il set di caratteri (UTF-8, UTF-16 e altri) per i dati da inserire o recuperare. Accede al database tramite Oracle Net.

OCI è l'API di livello più basso per l'accesso a un database, quindi offre le migliori prestazioni possibili.

Gestire i valori letterali di stringa NCHAR SQL in OCI

Puoi attivarlo impostando la variabile d'ambiente ORA_NCHAR_LITERAL_REPLACE a TRUE . Puoi anche ottenere questo comportamento a livello di codice utilizzando OCI_NCHAR_LITERAL_REPLACE_ON e OCI_NCHAR_LITERAL_REPLACE_OFF modalità in OCIEnvCreate() e OCIEnvNlsCreate() . Quindi, ad esempio, OCIEnvCreate(OCI_NCHAR_LITERAL_REPLACE_ON) attiva NCHAR sostituzione letterale, mentre OCIEnvCreate(OCI_NCHAR_LITERAL_REPLACE_OFF) si spegne.

[...] Nota che, quando il NCHAR la sostituzione letterale è attivata, OCIStmtPrepare e OCIStmtPrepare2 trasformerà N' letterali con U' letterali nel testo SQL e archiviare il testo SQL risultante nell'handle dell'istruzione . Pertanto, se l'applicazione utilizza OCI_ATTR_STATEMENT per recuperare il testo SQL da OCI handle dell'istruzione, il testo SQL restituirà U' invece di N' come specificato nel testo originale .

(3) Rispondi alla tua domanda

Dal punto di vista dei tipi di dati, non vi è alcuna differenza tra le due query fornite