significado nvarchar2 entre diferencia oracle oracle-xe

oracle - significado - Diferencia entre VARCHAR2(10 CHAR) y NVARCHAR2(10)



diferencia entre varchar2 y nvarchar2 (3)

El tipo de datos NVARCHAR2 fue introducido por Oracle para las bases de datos que desean usar Unicode para algunas columnas, mientras que mantienen otro conjunto de caracteres para el resto de la base de datos (que usa VARCHAR2). NVARCHAR2 es un tipo de datos de Unicode solamente.

Una razón por la que querrá usar NVARCHAR2 podría ser que su base de datos use un conjunto de caracteres no Unicode y aún así desee poder almacenar datos Unicode para algunas columnas sin cambiar el conjunto de caracteres principal. Otra razón podría ser que desee utilizar dos conjuntos de caracteres Unicode (AL32UTF8 para los datos que provienen principalmente de Europa occidental, AL16UTF16 para los datos que provienen principalmente de Asia, por ejemplo) porque los diferentes conjuntos de caracteres no almacenan los mismos datos igualmente eficientemente.

Ambas columnas en su ejemplo (Unicode VARCHAR2(10 CHAR) y NVARCHAR2(10) ) podrían almacenar los mismos datos; sin embargo, el almacenamiento de bytes será diferente. Algunas cadenas pueden almacenarse de manera más eficiente en uno u otro.

Tenga en cuenta también que algunas funciones no funcionarán con NVARCHAR2, consulte esta pregunta SO:

Instalé Oracle Database 10g Express Edition (Universal) con la configuración predeterminada:

SELECT * FROM NLS_DATABASE_PARAMETERS; NLS_CHARACTERSET AL32UTF8 NLS_NCHAR_CHARACTERSET AL16UTF16

Dado que los tipos de datos CHAR y NCHAR parecen aceptar cadenas de bytes múltiples, ¿cuál es la diferencia exacta entre estas dos definiciones de columna?

VARCHAR2(10 CHAR) NVARCHAR2(10)


Me pregunto si NVARCHAR2 (1) y VARCHAR2 (1) actúan de forma diferente con respecto al valor nulo / vacío.

De la prueba, parece lo mismo ..

Puede obtener algunas sorpresas

es decir, comparar cadena vacía con! = ''Y'' no devolverá las filas de cadena vacías ... es decir, cadena vacía ni iguala ni iguala a ''Y'' ...

necesita la función nvl wrapper
eg y nvl (superior (WP. "OW_IS_MISRUN"), ''N'')! = ''Y''

select count (*) de "DATA_HUB". "OW_WELL_PERFORATION" WP donde WP.UWI = 17038046

7

select count (*) from "DATA_HUB". "OW_WELL_PERFORATION" WP donde WP.UWI = 17038046 y superior (WP. "OW_IS_MISRUN")! = ''Y''

1

select count (*) de "DATA_HUB". "OW_WELL_PERFORATION" WP donde WP.UWI = 17038046 y superior (WP. "OW_IS_MISRUN") = ''Y''

2

select count (*) de "DATA_HUB". "OW_WELL_PERFORATION" WP donde WP.UWI = 17038046 y nvl (superior (WP. "OW_IS_MISRUN"), ''N'')! = ''Y''

5


nVarchar2 es un almacenamiento de Unicode solamente .

Aunque ambos tipos de datos son tipos de datos String de longitud variable, puede observar la diferencia en la forma en que almacenan los valores. Cada personaje se almacena en bytes. Como sabemos, no todos los idiomas tienen alfabetos con la misma longitud, por ejemplo, el alfabeto inglés necesita 1 byte por carácter, sin embargo, los idiomas como japonés o chino necesitan más de 1 byte para almacenar un carácter.

Cuando especifica varchar2 (10) , le está diciendo al DB que solo se almacenarán 10 bytes de datos. Pero, cuando dices nVarchar2 (10) , significa que se almacenarán 10 caracteres . En este caso, no tiene que preocuparse por la cantidad de bytes que toma cada personaje.