sql >> Databáze >  >> RDS >> Oracle

Rozdíl mezi literály N'String' a U'String' v Oracle

V této odpovědi se pokusím poskytnout informace z oficiálních zdrojů

(1) Doslovný text N''

N'' se používá k převodu řetězce na NCHAR nebo NVARCHAR2 datový typ

Podle této dokumentace Oracle Oracle - Literals

Syntaxe textových literálů je následující:

kde N nebo n určuje literál pomocí národní znakové sady (NCHAR nebo NVARCHAR2 údaje).

Také v tomto druhém článku Oracle – Datatypes

N'String' se používá k převodu řetězce na NCHAR datový typ

Z výše uvedeného článku:

Následující příklad porovnává translated_description ve sloupci pm.product_descriptions tabulka s řetězcem národní znakové sady :

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

(2) The U'' Literal

U'' se používá ke zpracování SQL NCHAR String Literals v Oracle Call Interface (OCI)

Na základě této dokumentace Oracle Programming with Unicode

Rozhraní Oracle Call Interface (OCI) je rozhraní API nejnižší úrovně, které používají ostatní produkty pro přístup k databázi na straně klienta. Programům C/C++ poskytuje flexibilní způsob přístupu k datům Unicode uloženým v SQL CHAR a NCHAR typy dat. Pomocí OCI můžete programově určit znakovou sadu (UTF-8, UTF-16 a další) pro data, která mají být vložena nebo načtena. K databázi přistupuje přes Oracle Net.

OCI je API nejnižší úrovně pro přístup k databázi, takže nabízí nejlepší možný výkon.

Zpracování řetězcových literálů SQL NCHAR v OCI

Můžete jej zapnout nastavením proměnné prostředí ORA_NCHAR_LITERAL_REPLACE na TRUE . Tohoto chování můžete dosáhnout také programově pomocí OCI_NCHAR_LITERAL_REPLACE_ON a OCI_NCHAR_LITERAL_REPLACE_OFF režimy v OCIEnvCreate() a OCIEnvNlsCreate() . Například OCIEnvCreate(OCI_NCHAR_LITERAL_REPLACE_ON) zapne NCHAR doslovné nahrazení, zatímco OCIEnvCreate(OCI_NCHAR_LITERAL_REPLACE_OFF) vypne.

[...] Všimněte si, že když NCHAR je zapnuta doslovná náhrada, OCIStmtPrepare a OCIStmtPrepare2 transformuje N' literály s U' literály v textu SQL a výsledný text SQL uložit do handle příkazu . Pokud tedy aplikace používá OCI_ATTR_STATEMENT k načtení textu SQL z OCI popisovač příkazu, text SQL vrátí U' místo N' jak je uvedeno v původním textu .

(3) Odpověď na vaši otázku

Z pohledu datových typů není mezi oběma poskytnutými dotazy rozdíl



  1. Jak předat pole do uložené procedury serveru SQL Server

  2. SQLDeveloper nezobrazuje žádné tabulky pod připojeními, kde je uvedeno tabulky

  3. Jak mohu v Oracle zkombinovat více řádků do seznamu odděleného čárkami?

  4. Oracle Floats vs Number