sql >> Database >  >> RDS >> Oracle

Verschil tussen N'String' versus U'String'-letterwoorden in Oracle

In dit antwoord zal ik proberen informatie te verstrekken uit officiële bronnen

(1) De N''-tekst Letterlijk

N'' wordt gebruikt om een ​​string te converteren naar NCHAR of NVARCHAR2 gegevenstype

Volgens deze Oracle-documentatie Oracle - Literals

De syntaxis van letterlijke tekst is als volgt:

waar N of n specificeert de letterlijke met behulp van de nationale tekenset (NCHAR of NVARCHAR2 gegevens).

Ook in dit tweede artikel Oracle - Datatypes

De N'String' wordt gebruikt om een ​​string te converteren naar NCHAR gegevenstype

Uit het hierboven genoemde artikel:

Het volgende voorbeeld vergelijkt de translated_description kolom van de pm.product_descriptions tabel met een nationale tekenreeksreeks :

SELECT translated_description FROM product_descriptions
  WHERE translated_name = N'LCD Monitor 11/PM';

(2) De U'' Letterlijk

U'' wordt gebruikt om de SQL NCHAR String Literals in Oracle Call Interface (OCI) te verwerken

Op basis van deze Oracle-documentatie Programmeren met Unicode

De Oracle-oproepinterface (OCI) is de API op het laagste niveau die de rest van de client-side databasetoegangsproducten gebruiken. Het biedt een flexibele manier voor C/C++-programma's om toegang te krijgen tot Unicode-gegevens die zijn opgeslagen in SQL CHAR en NCHAR gegevenstypen. Met OCI kunt u de tekenset (UTF-8, UTF-16 en andere) programmatisch specificeren voor de gegevens die moeten worden ingevoegd of opgehaald. Het heeft toegang tot de database via Oracle Net.

OCI is de API op het laagste niveau voor toegang tot een database, dus het biedt de best mogelijke prestaties.

Omgaan met SQL NCHAR-tekenreeksletters in OCI

U kunt het inschakelen door de omgevingsvariabele ORA_NCHAR_LITERAL_REPLACE in te stellen naar TRUE . U kunt dit gedrag ook programmatisch bereiken met behulp van de OCI_NCHAR_LITERAL_REPLACE_ON en OCI_NCHAR_LITERAL_REPLACE_OFF modi in OCIEnvCreate() en OCIEnvNlsCreate() . Dus bijvoorbeeld OCIEnvCreate(OCI_NCHAR_LITERAL_REPLACE_ON) schakelt NCHAR in letterlijke vervanging, terwijl OCIEnvCreate(OCI_NCHAR_LITERAL_REPLACE_OFF) schakelt het uit.

[...] Merk op dat, wanneer de NCHAR letterlijke vervanging is ingeschakeld, OCIStmtPrepare en OCIStmtPrepare2 zal N' transformeren letterlijke met U' letterlijke waarden in de SQL-tekst en sla de resulterende SQL-tekst op in de instructiehandle . Dus als de applicatie OCI_ATTR_STATEMENT . gebruikt om de SQL-tekst op te halen uit de OCI instructiehandle, de SQL-tekst retourneert U' in plaats van N' zoals gespecificeerd in de originele tekst .

(3) Antwoord op uw vraag

Vanuit het perspectief van datatypes is er geen verschil tussen beide verstrekte zoekopdrachten



  1. Heeft u problemen met het crashen van MS Access? Probeer eerst deze oplossingen

  2. Subquery met Bestaat 1 of Bestaat *

  3. DB_NAME() versus ORIGINAL_DB_NAME() in SQL Server:wat is het verschil?

  4. GroupingError:ERROR:kolom moet voorkomen in de GROUP BY-clausule of worden gebruikt in een aggregatiefunctie