Pregunta ¿Cuál es la diferencia entre varchar y nvarchar?


Es solo eso nvarchar admite caracteres multibyte? Si ese es el caso, ¿hay realmente algún punto, además de preocupaciones de almacenamiento, para usar varchars?


1167
2017-09-27 19:34


origen


Respuestas:


Un nvarchar la columna puede almacenar cualquier información Unicode. UN varchar la columna está restringida a una página de códigos de 8 bits. Algunas personas piensan que varchar debería usarse porque ocupa menos espacio. Creo que esta no es la respuesta correcta. Las incompatibilidades de Codepage son un problema, y ​​Unicode es la cura para los problemas de codepage. Con disco y memoria baratos hoy en día, realmente no hay ninguna razón para perder el tiempo dando vueltas con las páginas de códigos.

Todos los sistemas operativos modernos y las plataformas de desarrollo usan Unicode internamente. Mediante el uso nvarchar más bien que varchar, puede evitar hacer conversiones de codificación cada vez que lee o escribe en la base de datos. Las conversiones toman tiempo y son propensas a errores. Y la recuperación de los errores de conversión es un problema no trivial.

Si está interactuando con una aplicación que solo usa ASCII, aún recomendaría usar Unicode en la base de datos. Los algoritmos de intercalación de sistema operativo y base de datos funcionarán mejor con Unicode. Unicode evita problemas de conversión cuando interactúa con otro sistemas. Y te estarás preparando para el futuro. Y siempre puede validar que sus datos están restringidos a ASCII de 7 bits para cualquier sistema heredado que tenga que mantener, incluso mientras disfruta de algunos de los beneficios del almacenamiento Unicode completo.


1435
2017-09-29 02:16



varchar: Datos de caracteres no Unicode de longitud variable. La intercalación de la base de datos determina con qué página de códigos se almacenan los datos.

nvarchar: Datos de caracteres Unicode de longitud variable. Depende de la recopilación de la base de datos para las comparaciones.

Armados con este conocimiento, use el que coincida con sus datos de entrada (ASCII v. Unicode).


224
2017-09-27 19:37



Siempre uso nvarchar porque permite que lo que estoy construyendo resista prácticamente cualquier dato que arroje. Mi sistema CMS hace chino por accidente, porque usé nvarchar. Actualmente, las nuevas aplicaciones no deberían preocuparse por la cantidad de espacio requerido.


61
2017-09-27 19:37



Aquí puedes ver las diferencias entre varchar y nvarchar.

Enter image description here

Enter image description here

Enter image description here

Enter image description here

Referencia: SqlHints.com

Para obtener más información sobre Nvarchar y varchar, consulte esta publicación en el blog.


42
2017-11-24 08:45



Depende de cómo se haya instalado Oracle. Durante el proceso de instalación, se establece la opción NLS_CHARACTERSET. Es posible que pueda encontrarlo con la consulta SELECT value$ FROM sys.props$ WHERE name = 'NLS_CHARACTERSET'.

Si su NLS_CHARACTERSET es una codificación Unicode como UTF8, genial. El uso de VARCHAR y NVARCHAR son bastante idénticos. Deja de leer ahora, solo hazlo. De lo contrario, o si no tienes control sobre el conjunto de caracteres de Oracle, sigue leyendo.

VARCHAR: los datos se almacenan en la codificación NLS_CHARACTERSET. Si hay otras instancias de base de datos en el mismo servidor, usted puede estar restringido por ellas; y viceversa, ya que tienes que compartir la configuración. Tal campo puede almacenar cualquier información que pueda ser codificada usando ese conjunto de caracteres, y nada más. Entonces, por ejemplo, si el juego de caracteres es MS-1252, solo puede almacenar caracteres como letras inglesas, un puñado de letras acentuadas y algunas otras (como € y -). Su aplicación solo sería útil para algunas localidades, sin poder operar en ningún otro lugar del mundo. Por esta razón, se considera una mala idea.

NVARCHAR: los datos se almacenan en una codificación Unicode. Todos los idiomas son compatibles. Una buena idea.

¿Qué hay de espacio de almacenamiento? VARCHAR es generalmente eficiente, ya que el conjunto de caracteres / codificación se diseñó a medida para una configuración regional específica. Los campos NVARCHAR se almacenan en codificación UTF-8 o UTF-16, con base en la configuración de NLS de manera irónica. UTF-8 es muy eficiente para los idiomas "occidentales", al tiempo que sigue admitiendo idiomas asiáticos. UTF-16 es muy eficiente para idiomas asiáticos, mientras que todavía admite idiomas "occidentales". Si le preocupa el espacio de almacenamiento, elija una configuración NLS para que Oracle use UTF-8 o UTF-16 según corresponda.

¿Qué hay de la velocidad de procesamiento? La mayoría de las plataformas de codificación nuevas usan Unicode de forma nativa (Java, .NET, incluso C ++ std :: wstring de años atrás), por lo que si el campo de la base de datos es VARCHAR obliga a Oracle a convertir juegos de caracteres en cada lectura o escritura, no tan bueno. El uso de NVARCHAR evita la conversión.

En resumen: ¡use NVARCHAR! Evita las limitaciones y las dependencias, está bien para el espacio de almacenamiento, y generalmente también es mejor para el rendimiento.


29
2017-10-07 18:08



nvarchar almacena datos como Unicode, por lo tanto, si va a almacenar datos multilingües (más de un idioma) en una columna de datos, necesita la variante N.


15
2017-09-27 19:36



Mis dos centavos

  1. Los índices pueden fallar cuando no se usan los tipos de datos correctos:
    En SQL Server: cuando tiene un índice sobre una columna VARCHAR y lo presenta como una cadena Unicode, SQL Server no utiliza el índice. Lo mismo ocurre cuando presenta un BigInt en una columna indexada que contiene SmallInt. Incluso si BigInt es lo suficientemente pequeño para ser un SmallInt, SQL Server no puede usar el índice. A la inversa, no tiene este problema (al proporcionar SmallInt o Ansi-Code a una columna BigInt ot NVARCHAR indexada).

  2. Los tipos de datos pueden variar entre diferentes DBMS (Sistema de gestión de bases de datos):
    Sepa que cada base de datos tiene tipos de datos ligeramente diferentes y VARCHAR no significa lo mismo en todas partes. Mientras SQL Server tiene VARCHAR y NVARCHAR, una base de datos Apache / Derby solo tiene VARCHAR y allí VARCHAR está en Unicode.


13
2018-04-19 09:53



Principalmente nvarchar almacena caracteres Unicode y varchar almacena caracteres no Unicode.

"Unicodes" significa un esquema de codificación de caracteres de 16 bits que permite codificar caracteres de muchos otros idiomas, como árabe, hebreo, chino y japonés, en un solo juego de caracteres.

Eso significa que Unicodes está usando 2 bytes por carácter para almacenar y no unicodes utiliza solo un byte por carácter para almacenar. Lo que significa que los Unicodes necesitan una doble capacidad de almacenamiento en comparación con los que no son Unicodes.


11
2017-12-14 12:09