values sintaxis regexp_like multiple how sql string oracle literals string-literals

sql - sintaxis - Diferencia entre los literales de N''String ''vs U''String'' en Oracle



regexp_like oracle (3)

cuando usamos N'' , denotamos que el tipo de datos dado es NCHAR o NVARCHAR .

U'' se utiliza para denotar unicode

¿Cuál es el significado y la diferencia entre estas consultas?

SELECT U''String'' FROM dual;

y

SELECT N''String'' FROM dual;


En esta respuesta trataré de proporcionar información de recursos oficiales.

(1) El texto N '''' Literal

N'''' se usa para convertir una cadena a un tipo de datos NCHAR o NVARCHAR2

Según esta documentación de Oracle Oracle - Literales

La sintaxis de los literales de texto es la siguiente:

donde N o n especifica el literal utilizando el conjunto de caracteres nacional (datos NCHAR o NVARCHAR2 ).

También en este segundo artículo Oracle - Datatypes

El N''String'' se utiliza para convertir una cadena a un tipo de datos NCHAR

Del artículo mencionado anteriormente:

El siguiente ejemplo compara la columna translated_description de la tabla pm.product_descriptions con una cadena de conjunto de caracteres nacional :

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

(2) La U '''' Literal

U'''' se utiliza para manejar los literales de cadena de SQL NCHAR en la interfaz de llamada de Oracle (OCI)

Basado en esta documentación de Oracle Programación con Unicode.

La Interfaz de llamada de Oracle (OCI) es la API de nivel más bajo que el resto de productos de acceso a la base de datos del lado del cliente utiliza. Proporciona una forma flexible para que los programas C / C ++ accedan a los datos Unicode almacenados en los tipos de datos CHAR y NCHAR SQL. Al utilizar OCI, puede especificar mediante programación el conjunto de caracteres (UTF-8, UTF-16 y otros) para que los datos se inserten o recuperen. Accede a la base de datos a través de Oracle Net.

OCI es la API de nivel más bajo para acceder a una base de datos, por lo que ofrece el mejor rendimiento posible.

Manejo de cadenas de caracteres de SQL NCHAR en OCI

Puede ORA_NCHAR_LITERAL_REPLACE configurando la variable de entorno ORA_NCHAR_LITERAL_REPLACE en TRUE . También puede lograr este comportamiento mediante programación usando los modos OCI_NCHAR_LITERAL_REPLACE_ON y OCI_NCHAR_LITERAL_REPLACE_OFF en OCIEnvCreate() y OCIEnvNlsCreate() . Entonces, por ejemplo, OCIEnvCreate(OCI_NCHAR_LITERAL_REPLACE_ON) activa el reemplazo literal de NCHAR , mientras que OCIEnvCreate(OCI_NCHAR_LITERAL_REPLACE_OFF) lo desactiva.

[...] Tenga en cuenta que, cuando el reemplazo literal de NCHAR está activado, OCIStmtPrepare y OCIStmtPrepare2 transformarán N'' literales con U'' literales en el texto SQL y almacenarán el texto SQL resultante en el identificador de la declaración . Por lo tanto, si la aplicación usa OCI_ATTR_STATEMENT para recuperar el texto de SQL del identificador de la declaración OCI , el texto de SQL devolverá U'' lugar de N'' como se especifica en el texto original .

(3) Responde a tu pregunta

Desde la perspectiva de los tipos de datos, no hay diferencia entre las dos consultas proporcionadas


  • N'' string '' solo devuelve la string como tipo NCHAR .

  • U'' string '' también devuelve el tipo NCHAR , sin embargo, realiza un procesamiento adicional a la string : reemplaza // con / y / xxxx con el punto de código Unicode U+ xxxx , donde xxxx son 4 dígitos hexadecimales. Esto es similar a UNISTR('' string '') , la diferencia es que la última devuelve NVARCHAR2 .

U'' literales U'' son útiles cuando quieres tener una cadena Unicode independiente de la codificación y la configuración NLS.

Ejemplo:

select n''/€'', u''///20ac'', n''///20ac'' from dual; N''/€'' U''///20AC'' N''///20AC'' ----- ---------- ---------- /€ /€ ///20ac