Ответ 1
В этом ответе я попытаюсь предоставить информацию из официальных ресурсов
(1) Строковый текст N ''
N''
используется для преобразования строки в NCHAR
или NVARCHAR2
datatype
Согласно этой документации Oracle Oracle - Literals
Синтаксис текстовых литералов выглядит следующим образом:
где
N
илиN
указывает литерал с использованием национального набора символов (NCHAR
илиNVARCHAR2
).
Также в этой статье Oracle - Datatypes
N'String'
используется для преобразования строки в NCHAR
datatype
Из приведенной выше статьи:
В следующем примере сравнивается столбец
translated_description
таблицыpm.product_descriptions
с национальной строкой набора :SELECT translated_description FROM product_descriptions WHERE translated_name = N'LCD Monitor 11/PM';
(2) U '' Literal
U''
используется для обработки литералов SQL NCHAR String в Oracle Call Interface (OCI)
Основываясь на этой документации Oracle Программирование в Юникоде
Интерфейс Oracle Call (OCI) - это API самого низкого уровня, который использует остальные продукты доступа к базе данных на стороне клиента. Он обеспечивает гибкий способ для программ C/С++ получать доступ к данным Unicode, хранящимся в типах данных
CHAR
иNCHAR
SQL. Используя OCI, вы можете программно указать набор символов (UTF-8, UTF-16 и другие) для данных, которые нужно вставить или получить. Он обращается к базе данных через Oracle Net.
OCI - это API самого низкого уровня для доступа к базе данных, поэтому он обеспечивает наилучшую производительность.
Обработка литералов строк SQL NCHAR в OCI
Вы можете включить его, установив переменную окружения
ORA_NCHAR_LITERAL_REPLACE
наTRUE
. Вы также можете программно реализовать это поведение, используя режимыOCI_NCHAR_LITERAL_REPLACE_ON
иOCI_NCHAR_LITERAL_REPLACE_OFF
вOCIEnvCreate()
иOCIEnvNlsCreate()
. Так, например,OCIEnvCreate(OCI_NCHAR_LITERAL_REPLACE_ON)
включаетNCHAR
литерал замены, аOCIEnvCreate(OCI_NCHAR_LITERAL_REPLACE_OFF)
отключает его.[...] Обратите внимание, что при замене литерала
NCHAR
,OCIStmtPrepare
иOCIStmtPrepare2
преобразует литералыN'
сU'
литералами в тексте SQL и сохранит полученный SQL-текст в дескрипторе инструкции. Таким образом, если приложение используетOCI_ATTR_STATEMENT
для извлечения текста SQL из дескриптора дескриптораOCI
, текст SQL вернетU'
вместоN'
, как указано в исходном тексте.
(3) Ответьте на вопрос
С точки зрения данных, нет разницы между обоими запросами