I dette svar vil jeg forsøge at give oplysninger fra officielle ressourcer
(1) N''-teksten bogstavelig
N''
bruges til at konvertere en streng til NCHAR
eller NVARCHAR2
datatype
Ifølge denne Oracle-dokumentation Oracle - Literals
Syntaksen for bogstaver i tekst er som følger:
hvor N
eller n
angiver det bogstavelige ved hjælp af det nationale tegnsæt (NCHAR
eller NVARCHAR2
data).
Også i denne anden artikel Oracle - Datatyper
N'String'
bruges til at konvertere en streng til NCHAR
datatype
Fra artiklen ovenfor:
Følgende eksempel sammenligner translated_description
kolonne i pm.product_descriptions
tabel med en national tegnsætstreng :
SELECT translated_description FROM product_descriptions
WHERE translated_name = N'LCD Monitor 11/PM';
(2) U'' bogstaveligt
U''
bruges til at håndtere SQL NCHAR String Literals i Oracle Call Interface (OCI)
Baseret på denne Oracle-dokumentation Programmering med Unicode
Oracle Call Interface (OCI) er det laveste niveau API, som resten af klientsidens databaseadgangsprodukter bruger. Det giver en fleksibel måde for C/C++-programmer at få adgang til Unicode-data gemt i SQL CHAR
og NCHAR
datatyper. Ved hjælp af OCI kan du programmæssigt angive tegnsættet (UTF-8, UTF-16 og andre) for de data, der skal indsættes eller hentes. Den får adgang til databasen via Oracle Net.
OCI er det laveste niveau API til at få adgang til en database, så det giver den bedst mulige ydeevne.
Håndtering af SQL NCHAR String Literals i OCI
Du kan tænde for det ved at indstille miljøvariablen ORA_NCHAR_LITERAL_REPLACE
til TRUE
. Du kan også opnå denne adfærd programmatisk ved at bruge OCI_NCHAR_LITERAL_REPLACE_ON
og OCI_NCHAR_LITERAL_REPLACE_OFF
tilstande i OCIEnvCreate()
og OCIEnvNlsCreate()
. Så for eksempel OCIEnvCreate(OCI_NCHAR_LITERAL_REPLACE_ON)
tænder NCHAR
bogstavelig erstatning, mens OCIEnvCreate(OCI_NCHAR_LITERAL_REPLACE_OFF)
slår den fra.
[...] Bemærk, at når NCHAR
bogstavelig erstatning er slået til, OCIStmtPrepare
og OCIStmtPrepare2
vil transformere N'
bogstaver med U'
bogstaver i SQL-teksten og gem den resulterende SQL-tekst i sætningshåndtaget . Således, hvis applikationen bruger OCI_ATTR_STATEMENT
for at hente SQL-teksten fra OCI
sætningshåndtag, vil SQL-teksten returnere U'
i stedet for N'
som angivet i den originale tekst .
(3) Svar på dit spørgsmål
Fra datatypeperspektiv er der ingen forskel mellem de to forespørgsler