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