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

Forskellen mellem N'String' vs U'String' bogstaver i Oracle

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



  1. Brug af SQLCipher med Android

  2. Hvordan viser jeg de sidste forespørgsler udført på MySQL?

  3. Nye funktioner i SQL Server 2017 (Database Engine)

  4. Brug Opret erklæring til at oprette tabel i SQL Server - SQL Server / T-SQL selvstudie del 34