V této odpovědi se pokusím poskytnout informace z oficiálních zdrojů
(1) Doslovný text N''
N''
se používá k převodu řetězce na NCHAR
nebo NVARCHAR2
datový typ
Podle této dokumentace Oracle Oracle - Literals
Syntaxe textových literálů je následující:
kde
N
nebon
určuje literál pomocí národní znakové sady (NCHAR
neboNVARCHAR2
údaje).
Také v tomto druhém článku Oracle – Datatypes
N'String'
se používá k převodu řetězce na NCHAR
datový typ
Z výše uvedeného článku:
Následující příklad porovnává
translated_description
ve sloupcipm.product_descriptions
tabulka s řetězcem národní znakové sady :SELECT translated_description FROM product_descriptions WHERE translated_name = N'LCD Monitor 11/PM';
(2) The U'' Literal
U''
se používá ke zpracování SQL NCHAR String Literals v Oracle Call Interface (OCI)
Na základě této dokumentace Oracle Programming with Unicode
Rozhraní Oracle Call Interface (OCI) je rozhraní API nejnižší úrovně, které používají ostatní produkty pro přístup k databázi na straně klienta. Programům C/C++ poskytuje flexibilní způsob přístupu k datům Unicode uloženým v SQL
CHAR
aNCHAR
typy dat. Pomocí OCI můžete programově určit znakovou sadu (UTF-8, UTF-16 a další) pro data, která mají být vložena nebo načtena. K databázi přistupuje přes Oracle Net.
OCI je API nejnižší úrovně pro přístup k databázi, takže nabízí nejlepší možný výkon.
Zpracování řetězcových literálů SQL NCHAR v OCI
Můžete jej zapnout nastavením proměnné prostředí
ORA_NCHAR_LITERAL_REPLACE
naTRUE
. Tohoto chování můžete dosáhnout také programově pomocíOCI_NCHAR_LITERAL_REPLACE_ON
aOCI_NCHAR_LITERAL_REPLACE_OFF
režimy vOCIEnvCreate()
aOCIEnvNlsCreate()
. NapříkladOCIEnvCreate(OCI_NCHAR_LITERAL_REPLACE_ON)
zapneNCHAR
doslovné nahrazení, zatímcoOCIEnvCreate(OCI_NCHAR_LITERAL_REPLACE_OFF)
vypne.[...] Všimněte si, že když
NCHAR
je zapnuta doslovná náhrada,OCIStmtPrepare
aOCIStmtPrepare2
transformujeN'
literály sU'
literály v textu SQL a výsledný text SQL uložit do handle příkazu . Pokud tedy aplikace používáOCI_ATTR_STATEMENT
k načtení textu SQL zOCI
popisovač příkazu, text SQL vrátíU'
místoN'
jak je uvedeno v původním textu .
(3) Odpověď na vaši otázku
Z pohledu datových typů není mezi oběma poskytnutými dotazy rozdíl