In dieser Antwort werde ich versuchen, Informationen aus offiziellen Quellen bereitzustellen
(1) Das N''-Textliteral
N''
wird verwendet, um einen String in NCHAR
umzuwandeln oder NVARCHAR2
Datentyp
Laut dieser Oracle-Dokumentation Oracle - Literals
Die Syntax von Textliteralen lautet wie folgt:
wobei N
oder n
spezifiziert das Literal mit dem nationalen Zeichensatz (NCHAR
oder NVARCHAR2
Daten).
Auch in diesem zweiten Artikel Oracle - Datentypen
Der N'String'
wird verwendet, um einen String in NCHAR
umzuwandeln Datentyp
Aus dem oben aufgeführten Artikel:
Das folgende Beispiel vergleicht die translated_description
Spalte der pm.product_descriptions
Tabelle mit einem nationalen Zeichensatz :
SELECT translated_description FROM product_descriptions
WHERE translated_name = N'LCD Monitor 11/PM';
(2) Das U''-Literal
U''
wird verwendet, um die SQL-NCHAR-String-Literale in Oracle Call Interface (OCI) zu verarbeiten
Basierend auf dieser Oracle-Dokumentation Programmieren mit Unicode
Die Oracle-Anrufschnittstelle (OCI) ist die API auf unterster Ebene, die von den übrigen Produkten für den clientseitigen Datenbankzugriff verwendet wird. Es bietet C/C++-Programmen eine flexible Möglichkeit, auf Unicode-Daten zuzugreifen, die in SQL CHAR
gespeichert sind und NCHAR
Datentypen. Mit OCI können Sie den Zeichensatz (UTF-8, UTF-16 und andere) für die einzufügenden oder abzurufenden Daten programmgesteuert angeben. Es greift über Oracle Net auf die Datenbank zu.
OCI ist die niedrigste API für den Zugriff auf eine Datenbank und bietet daher die bestmögliche Leistung.
Verarbeitung von SQL-NCHAR-String-Literalen in OCI
Sie können es einschalten, indem Sie die Umgebungsvariable ORA_NCHAR_LITERAL_REPLACE
setzen auf TRUE
. Sie können dieses Verhalten auch programmgesteuert erreichen, indem Sie OCI_NCHAR_LITERAL_REPLACE_ON
verwenden und OCI_NCHAR_LITERAL_REPLACE_OFF
Modi in OCIEnvCreate()
und OCIEnvNlsCreate()
. Also zum Beispiel OCIEnvCreate(OCI_NCHAR_LITERAL_REPLACE_ON)
schaltet NCHAR
ein wörtliche Ersetzung, während OCIEnvCreate(OCI_NCHAR_LITERAL_REPLACE_OFF)
schaltet es aus.
[...] Beachten Sie, dass bei NCHAR
wörtliche Ersetzung ist aktiviert, OCIStmtPrepare
und OCIStmtPrepare2
wandelt N'
um Literale mit U'
Literale im SQL-Text und speichern den resultierenden SQL-Text im Statement-Handle . Wenn also die Anwendung OCI_ATTR_STATEMENT
verwendet um den SQL-Text aus dem OCI
abzurufen Anweisungshandle, gibt der SQL-Text U'
zurück statt N'
wie im Originaltext angegeben .
(3) Antwort auf Ihre Frage
Aus Sicht der Datentypen gibt es keinen Unterschied zwischen den beiden bereitgestellten Abfragen