Saltar al contenido

Diferencia entre VARCHAR2(10 CARACTERES) y NVARCHAR2(10)

Indagamos por distintos sitios para así tener para ti la solución para tu duda, en caso de inquietudes puedes dejarnos tu comentario y contestaremos con mucho gusto, porque estamos para servirte.

Solución:

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

Una razón por la que puede querer usar NVARCHAR2 podría ser que su base de datos usa un conjunto de caracteres que no es Unicode y aún desea 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 datos que provienen principalmente de Europa occidental, AL16UTF16 para datos que provienen principalmente de Asia, por ejemplo) porque los diferentes conjuntos de caracteres no almacenarán los mismos datos con la misma eficiencia.

Ambas columnas en su ejemplo (Unicode VARCHAR2(10 CHAR) y NVARCHAR2(10)) podría 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 características no funcionarán con NVARCHAR2, consulte esta pregunta SO:

  • Oracle Text no funcionará con NVARCHAR2. ¿Qué más podría no estar disponible?

No creo que la respuesta de Vincent Malgrat sea correcta. Cuándo NVARCHAR2 era introducido Hace mucho tiempo nadie hablaba siquiera de Unicode.

Inicialmente, Oracle proporcionó VARCHAR2 y NVARCHAR2 para apoyar la localización. Los datos comunes (incluido PL/SQL) se mantuvieron en VARCHAR2, más probable US7ASCII estos días. Entonces podrías aplicar NLS_NCHAR_CHARACTERSET individualmente (por ejemplo WE8ISO8859P1) para cada uno de sus clientes en cualquier país sin tocar la parte común de su aplicación.

Conjunto de caracteres de hoy en día AL32UTF8 es el valor predeterminado que es totalmente compatible con Unicode. En mi opinión, hoy ya no hay razón para usar NLS_NCHAR_CHARACTERSET, es decir NVARCHAR2, NCHAR2, NCLOB. Tenga en cuenta que cada vez hay más funciones nativas de Oracle que no son compatibles con NVARCHAR2, por lo que debería evitarlo. Tal vez la única razón es cuando tienes que admitir principalmente personajes asiáticos donde AL16UTF16 consume menos almacenamiento en comparación con AL32UTF8.

  • El NVARCHAR2 almacena datos de caracteres de longitud variable. Cuando crea una tabla con el NVARCHAR2 columna, el tamaño máximo siempre está en la semántica de longitud de caracteres, que también es la semántica de longitud predeterminada y única para la NVARCHAR2 tipo de datos.

    El NVARCHAR2usos de tipos de datos AL16UTF16juego de caracteres que codifica datos Unicode en el UTF-16 codificación El AL16UTF16 usar 2 bytes para almacenar un caracter. Además, la longitud máxima en bytes de un NVARCHAR2 depende del juego de caracteres nacional configurado.

  • VARCHAR2 El tamaño máximo de VARCHAR2 puede estar en bytes o caracteres. Su columna solo puede almacenar caracteres en el conjunto de caracteres predeterminado, mientras que la NVARCHAR2 puede almacenar prácticamente cualquier carácter. Un solo carácter puede requerir hasta 4 bytes.

Definiendo el campo como:

  • VARCHAR2(10 CHAR) le dice a Oracle que puede usar suficiente espacio para almacenar 10 caracteres, sin importar cuántos bytes se necesiten para almacenar cada uno. Un solo carácter puede requerir hasta 4 bytes.
  • NVARCHAR2(10) le dices a Oracle que puede almacenar 10 caracteres con 2 bytes por carácter

En resumen:

  • VARCHAR2(10 CHAR) puede almacenar un máximo de 10 characters y máximo de 40 bytes (depende del juego de caracteres nacional configurado).

  • NVARCHAR2(10) puede almacenar un máximo de 10 characters y máximo de 20 bytes (depende del juego de caracteres nacional configurado).

Nota: El conjunto de caracteres puede ser UTF-8, UTF-16,….

Por favor, eche un vistazo a este tutorial para obtener más detalles.

¡Que tenga un buen día!

Puntuaciones y reseñas

Nos puedes confirmar nuestro trabajo añadiendo un comentario y puntuándolo te damos la bienvenida.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *