Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Różnica między literałami N'String' i U'String' w Oracle

W tej odpowiedzi postaram się podać informacje z oficjalnych zasobów

(1) Literał tekstu N''

N'' służy do konwersji ciągu znaków na NCHAR lub NVARCHAR2 typ danych

Zgodnie z tą dokumentacją Oracle Oracle — literały

Składnia literałów tekstowych jest następująca:

gdzie N lub n określa literał używając narodowego zestawu znaków (NCHAR lub NVARCHAR2 dane).

Również w tym drugim artykule Oracle — typy danych

N'String' służy do konwersji ciągu znaków na NCHAR typ danych

Z artykułu wymienionego powyżej:

Poniższy przykład porównuje translated_description kolumna pm.product_descriptions tabela z ciągiem zestawu znaków narodowych :

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

(2) Literał U''

U'' służy do obsługi SQL NCHAR String Literals w Oracle Call Interface (OCI)

Na podstawie tej dokumentacji Oracle Programowanie w Unicode

Interfejs połączeń Oracle (OCI) to interfejs API najniższego poziomu, z którego korzystają pozostałe produkty dostępu do bazy danych po stronie klienta. Zapewnia elastyczny sposób dla programów C/C++ na dostęp do danych Unicode przechowywanych w SQL CHAR i NCHAR typy danych. Za pomocą OCI można programowo określić zestaw znaków (UTF-8, UTF-16 i inne) dla danych, które mają być wstawiane lub pobierane. Uzyskuje dostęp do bazy danych przez Oracle Net.

OCI to interfejs API najniższego poziomu umożliwiający dostęp do bazy danych, dzięki czemu oferuje najlepszą możliwą wydajność.

Obsługa literałów łańcuchowych SQL NCHAR w OCI

Możesz go włączyć, ustawiając zmienną środowiskową ORA_NCHAR_LITERAL_REPLACE na TRUE . Możesz również osiągnąć to zachowanie programowo, używając OCI_NCHAR_LITERAL_REPLACE_ON i OCI_NCHAR_LITERAL_REPLACE_OFF tryby w OCIEnvCreate() i OCIEnvNlsCreate() . Na przykład OCIEnvCreate(OCI_NCHAR_LITERAL_REPLACE_ON) włącza NCHAR zastąpienie literału, podczas gdy OCIEnvCreate(OCI_NCHAR_LITERAL_REPLACE_OFF) wyłącza go.

[...] Zauważ, że gdy NCHAR zastępowanie literałów jest włączone, OCIStmtPrepare i OCIStmtPrepare2 przekształci N' literały z U' literały w tekście SQL i przechowuj wynikowy tekst SQL w uchwycie instrukcji . Tak więc, jeśli aplikacja używa OCI_ATTR_STATEMENT aby pobrać tekst SQL z OCI uchwyt instrukcji, tekst SQL zwróci U' zamiast N' jak określono w oryginalnym tekście .

(3) Odpowiedź na Twoje pytanie

Z perspektywy typów danych nie ma różnicy między obydwoma dostarczonymi zapytaniami



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Usuwanie wierszy z tabel nadrzędnych i podrzędnych

  2. Jak można wielokrotnie uruchomić to samo zapytanie przy użyciu pętli w PL/SQL?

  3. TO_TIMESTAMP_TZ() Funkcja w Oracle

  4. Powielanie rekordów w celu wypełnienia luki między datami

  5. Oracle:Dni między dwiema datami i Wyklucz dni tygodnia, jak obsługiwać liczby ujemne