sql >> Databasteknik >  >> RDS >> Oracle

Skillnaden mellan N'String' vs U'String' bokstaver i Oracle

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 eller n anger bokstaven med den nationella teckenuppsättningen (NCHAR eller NVARCHAR2 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 i pm.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 och NCHAR 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 till TRUE . Du kan också uppnå detta beteende programmatiskt genom att använda OCI_NCHAR_LITERAL_REPLACE_ON och OCI_NCHAR_LITERAL_REPLACE_OFF lägen i OCIEnvCreate() och OCIEnvNlsCreate() . Så till exempel OCIEnvCreate(OCI_NCHAR_LITERAL_REPLACE_ON) aktiverar NCHAR bokstavlig ersättning, medan OCIEnvCreate(OCI_NCHAR_LITERAL_REPLACE_OFF) stänger av den.

[...] Observera att när NCHAR bokstavlig ersättning är aktiverad, OCIStmtPrepare och OCIStmtPrepare2 omvandlar N' bokstaver med U' bokstaver i SQL-texten och lagra den resulterande SQL-texten i satshandtaget . Således, om applikationen använder OCI_ATTR_STATEMENT för att hämta SQL-texten från OCI satshandtag, kommer SQL-texten att returnera U' istället för N' 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



  1. Anslut din ASP.NET kärnapplikation till en lokal instans av SQLServer

  2. De vanligaste frågorna om JAVA/JRE i Oracle Apps

  3. Hur säkerhetskopierar och återställer man en databas som en kopia på samma server?

  4. Databas hög tillgänglighet för Camunda BPM med MySQL eller MariaDB Galera Cluster