2009-08-13 16 views
11

Estoy almacenando nombre y apellido con hasta 30 caracteres cada uno. Que es mejor varchar o nvarchar.varchar o nvarchar

He leído que nvarchar ocupa el doble de espacio en comparación con varchar y que nvarchar se utiliza para la internacionalización.

¿Qué sugieres que debo usar: nvarchar o varchar?

También por favor quisiera saber sobre el rendimiento de ambos. El rendimiento de ambos es el mismo o difieren en el rendimiento. Porque el espacio no es un gran problema. El problema es el rendimiento.

+1

http://stackoverflow.com/questions/35366/varchar-vs-nvarchar-performance –

Respuesta

17

Básicamente, nvarchar significa que puede manejar una gran cantidad de alfabetos, no sólo regular Inglés. Técnicamente, significa soporte unicode, no solo ANSI. Esto significa caracteres de doble ancho o aproximadamente el doble del espacio. En estos días, el espacio en el disco es tan económico que podría usar nvarchar desde el principio en lugar de pasar por el dolor de tener que cambiar durante la vida de un producto.

Si está seguro de que usted sólo se necesita siempre para apoyar un idioma que podría seguir con varchar, de lo contrario me gustaría ir con nvarchar.

esto se ha discutido en lo que antes de here.

EDITADO: cambió ascii a ANSI como se indica en el comentario.

+3

siendo quisquilloso: en realidad, VARCHAR almacena datos ANSI - de 8 bits, normalmente basados ​​en una página de códigos como occidental o islandés o lo que sea que necesites :-) Es ANSI - 8 bits - no ASCII (= 7 bits) –

6

En primer lugar, para aclarar, nvarchar almacena datos Unicode, mientras que varchar almacena datos ANSI (8 bits). Funcionan de manera idéntica, pero el nvarchar ocupa el doble de espacio.

En general, prefiero almacenar nombres de usuario utilizando varchar tipos de datos a menos que esos nombres tengan caracteres que caigan fuera del límite de caracteres que varchar pueden almacenar.

También depende de la intercalación de la base de datos también. Por ej. no podrá almacenar caracteres rusos en un campo varchar, si la recopilación de la base de datos es LATIN_CS_AS. Pero, si está trabajando en una aplicación local, que se usará solo en Rusia, establecería la intercalación de la base de datos en ruso. Lo que hará es que le permitirá ingresar caracteres rusos en un campo varchar, ahorrando espacio.

Pero, actualmente, la mayoría de las aplicaciones que se están desarrollando son internacionales, por lo que usted mismo tendrá que decidir qué usuarios se van a registrar y, en función de eso, decidir el tipo de datos.

2

Tengo rojo que nvarchar toma dos veces como varchar.

Sí.

nvarchar se utiliza para la internacionalización.

Sí.

¿Qué sugieres si utilizo nvarchar o varchar?

Es depende de la aplicación.

+1

No es correcto. Un nvarchar necesita el doble de espacio que un varchar. Puede verificarlo fácilmente usando la función DATALENGTH. – Guffa

+0

Gracias Kirtan. Me disculpo por las molestias ocasionadas. – adatapost

1

Por defecto, vaya con nvarchar. Hay muy pocas razones para ir con varchar estos días, y todas las razones para ir con nvarchar (permite caracteres internacionales, como se discutió).

1

varchar es de 1 byte por carácter, nvarchar tiene 2 bytes por caracter.

Utilizará más espacio con nvarchar pero hay muchos más caracteres permitidos. El espacio extra es insignificante, pero es posible que te pierdas esos personajes adicionales en el futuro. Incluso si no espera requerir la internacionalización, las personas a menudo tendrán caracteres no ingleses (por ejemplo, é, ñ o ö) en sus nombres.

Le sugiero que use nvarchar.

0

El tipo nvarchar es Unicode, por lo que puede manejar cualquier personaje que exista en todos los idiomas del planeta. Los caracteres se almacenan como UTF-16 o UCS-2 (no estoy seguro de cuál, y las diferencias son sutiles), por lo que cada personaje usa dos bytes.

El tipo varchar usa un conjunto de caracteres de 8 bits, por lo que está limitado a los 255 caracteres del juego de caracteres que elija para el campo. Hay diferentes juegos de caracteres que manejan diferentes grupos de caracteres, por lo que generalmente es suficiente para el texto local de un país o región.

Si varchar funciona para lo que quieres hacer, deberías usarlo. Es un poco menos de datos, por lo que es en general un poco más rápido. Si necesita manejar una amplia variedad de caracteres, use nvarchar.

1

que tienen color rojo que lleva el doble de nvarchar varchar

Sí. Según Microsoft: "El tamaño de almacenamiento, en bytes, es dos veces el número de caracteres ingresados ​​+ 2 bytes" (http://msdn.microsoft.com/en-us/library/ms186939(SQL.90).aspx).

Pero el almacenamiento es barato; Nunca me preocupo por unos pocos bytes adicionales.

Además, ahórrese problemas en el futuro y establezca los anchos máximos en algo más generoso, como 100 caracteres. No hay absolutamente ningún gasto de almacenamiento cuando se usa varchar o nvarchar (en lugar de char/nchar). Nunca se sabe cuándo se encontrará con un apellido de triple cañón o un nombre extranjero largo que exceda los 30 caracteres.

nvarchar se utiliza para la internacionalización.

nvarchar puede almacenar cualquier carácter Unicode, como los caracteres de los scripts no latinos (árabe, chino, etc.). No estoy seguro de cómo su aplicación tomará los datos (a través de la web, a través de un kit de herramientas GUI, etc.), pero es probable que la tecnología que esté utilizando sea compatible con el Unicode desde el primer momento. Esto significa que para cualquier dato ingresado por el usuario (como nombre) existe siempre la posibilidad de recibir caracteres no latinos, si no ahora en el futuro.

Si estaba construyendo una nueva aplicación, usaría nvarchar. Llámalo "a prueba de futuro" si quieres.

0

en el rendimiento:
una razón para utilizar varchar sobre nvarchar es que se puede tener el doble de caracteres en sus índices! claves de índice se limitan a 900 bytes
en la usabilidad:
si la aplicación sólo está siempre dirigido a una audiencia Inglés & contienen nombres en inglés, el uso varchar

+0

Nunca encontró un índice de más de 450 caracteres de longitud. – zszep

0

de datos para almacenar: "Sunil"

varchar (5) toma 7B nvarchar (5) toma 12B

Cuestiones relacionadas