Oracle
 sql >> база данни >  >> RDS >> Oracle

Разлика между литералите N'String' и U'String в Oracle

В този отговор ще се опитам да предоставя информация от официални ресурси

(1) Текстовият литерал N''

N'' се използва за преобразуване на низ в NCHAR или NVARCHAR2 тип данни

Според тази документация на Oracle Oracle – Литерали

Синтаксисът на текстовите литерали е както следва:

където N или n указва литерала, използвайки националния набор от знаци (NCHAR или NVARCHAR2 данни).

Също в тази втора статия Oracle – Типове данни

N'String' се използва за преобразуване на низ в NCHAR тип данни

От статията, изброена по-горе:

Следващият пример сравнява translated_description колона на pm.product_descriptions таблица сниз за набор от национални знаци :

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

(2) Литерала U''

U'' се използва за обработка на SQL NCHAR низови литерали в Oracle Call Interface (OCI)

Въз основа на тази документация на Oracle Програмиране с Unicode

Интерфейсът за повикване на Oracle (OCI) е API от най-ниско ниво, който използват останалите продукти за достъп до база данни от страна на клиента. Той предоставя гъвкав начин за C/C++ програми за достъп до Unicode данни, съхранявани в SQL CHAR и NCHAR типове данни. С помощта на 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) Отговор на вашия въпрос

От гледна точка на типовете данни, няма разлика между двете предоставени заявки



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Spring Batch ORA-08177:не може да се сериализира достъпът за тази транзакция при изпълнение на едно задание, СЕРИАЛИЗИРАНО ниво на изолация

  2. Намиране на броя на знаците и числата в низ

  3. Използване на Oracle® Heterogeneous Services с два ODBC източника на данни

  4. Какъв е правилният синтаксис на JDBC URL, ако се използват портфейли на Oracle?

  5. Каква е разликата между неповтарящо се четене и фантомно четене?