I det här svaret kommer jag att försöka tillhandahålla information från officiella resurser
(1) N''-texten bokstavlig
N''
används för att konvertera en sträng till NCHAR
eller NVARCHAR2
datatyp
Enligt denna Oracle-dokumentation Oracle - Literals
Syntaxen för bokstavliga texter är följande:
där
N
ellern
anger bokstaven med den nationella teckenuppsättningen (NCHAR
ellerNVARCHAR2
data).
Även i denna andra artikel Oracle - Datatyper
N'String'
används för att konvertera en sträng till NCHAR
datatyp
Från artikeln ovan:
Följande exempel jämför
translated_description
kolumnen ipm.product_descriptions
tabell med en nationell teckenuppsättningssträng :SELECT translated_description FROM product_descriptions WHERE translated_name = N'LCD Monitor 11/PM';
(2) U'' Literal
U''
används för att hantera SQL NCHAR String Literals i Oracle Call Interface (OCI)
Baserat på denna Oracle-dokumentation Programmering med Unicode
Oracle Call Interface (OCI) är den lägsta nivå API som resten av klientsidans databasåtkomstprodukter använder. Det ger ett flexibelt sätt för C/C++-program att komma åt Unicode-data lagrade i SQL
CHAR
ochNCHAR
datatyper. Med OCI kan du programmässigt specificera teckenuppsättningen (UTF-8, UTF-16 och andra) för data som ska infogas eller hämtas. Den får åtkomst till databasen via Oracle Net.
OCI är den lägsta nivån API för att komma åt en databas, så det erbjuder bästa möjliga prestanda.
Hantera SQL NCHAR String Literals i OCI
Du kan slå på den genom att ställa in miljövariabeln
ORA_NCHAR_LITERAL_REPLACE
tillTRUE
. Du kan också uppnå detta beteende programmatiskt genom att användaOCI_NCHAR_LITERAL_REPLACE_ON
ochOCI_NCHAR_LITERAL_REPLACE_OFF
lägen iOCIEnvCreate()
ochOCIEnvNlsCreate()
. Så till exempelOCIEnvCreate(OCI_NCHAR_LITERAL_REPLACE_ON)
aktiverarNCHAR
bokstavlig ersättning, medanOCIEnvCreate(OCI_NCHAR_LITERAL_REPLACE_OFF)
stänger av den.[...] Observera att när
NCHAR
bokstavlig ersättning är aktiverad,OCIStmtPrepare
ochOCIStmtPrepare2
omvandlarN'
bokstaver medU'
bokstaver i SQL-texten och lagra den resulterande SQL-texten i satshandtaget . Således, om applikationen använderOCI_ATTR_STATEMENT
för att hämta SQL-texten frånOCI
satshandtag, kommer SQL-texten att returneraU'
istället förN'
som anges i originaltexten .
(3) Svar på din fråga
Ur datatypsperspektiv är det ingen skillnad mellan de båda frågorna som tillhandahålls