Debe utilizar NVARCHAR en cualquier momento usted tiene que almacenar múltiples idiomas. Creo que debes usarlo para los idiomas asiáticos, pero no me cites.
Este es el problema si toma el ruso por ejemplo y lo almacena en varchar, estará bien mientras defina la página de códigos correcta. Pero supongamos que usa una instalación sql en inglés predeterminada, y los caracteres rusos no se manejarán correctamente. Si usabas NVARCHAR(), se manejarían correctamente.
Editar
Ok permítanme citar MSDN y maybee debía específica pero no quiero almacenar más de una página de código en una columna varcar, mientras que se puede que no debería
Cuando tratas con datos de texto que se almacena en el char, varchar, varchar (max) o tipo de datos de texto, el limitación más importante a considerar es que sólo la información desde una única página de códigos puede ser validada por el sistema. (Puede almacenar datos desde páginas de códigos múltiples, pero esto no es recomendado.) La página de códigos exacta utilizada para validar y almacenar los datos depende en la intercalación de la columna. Si se ha definido una intercalación de nivel de columna no se ha definido , se utiliza la intercalación de la base de datos . Para determinar la página de códigos que se utiliza para una columna determinada, puede utilizar la función COLLATIONPROPERTY , como se muestra en los siguientes ejemplos de código:
Aquí hay más:
Este ejemplo ilustra el hecho de que muchas configuraciones regionales, como Georgian y Hindi, no tienen páginas de códigos, ya que son intercalaciones Unicode-only.Esos colaciones no son apropiados para columnas que utilizan el carbón, varchar o tipo de datos de texto
Así Georgia o hindi realmente necesitan ser almacenados como nvarchar. El árabe es también un problema:
Otro problema que se puede encontrar es la incapacidad para almacenar datos cuando no todos los caracteres que desea apoyo están contenidos en el código de la página . En muchos casos, Windows considera que una página de códigos particular es una "mejor página de códigos ", lo que significa que hay sin garantía de que puede confiar en la página de códigos para manejar todo el texto; es simplemente el mejor disponible. Un ejemplo de esto es la escritura árabe: es compatible con una amplia variedad de idiomas, incluyendo Baluchi, Berber, persa, de Cachemira, kazajo, kirguís, pashto, sindhi, uigur, urdu, y mucho más. Todas idiomas tienen caracteres adicionales más allá de los de la lengua árabe como se define en la página de códigos de Windows 1256. Si se intenta almacenar estos caracteres adicionales en una columna no Unicode que tiene la colación árabe , los caracteres son convertidos en signos de interrogación.
Algo que se debe tener en cuenta cuando se utiliza Unicode aunque se pueden almacenar diferentes idiomas en una sola columna, solo se puede ordenar usando una única intercalación. Hay algunos idiomas que usan caracteres latinos pero no los clasifican como otros idiomas latinos. Acentos es un buen ejemplo de esto, no puedo recordar el ejemplo, pero había un idioma de Europa del Este cuya Y no se ordenó como la Y española. Luego está el español ch que los usuarios españoles esperan clasificar después de h.
En definitiva, con todos los problemas que tiene que tratar cuando se trata de internalitionalization. En mi opinión, es más fácil usar los caracteres Unicode desde el principio, evitar las conversiones adicionales y aprovechar el éxito del espacio. De ahí mi declaración anterior.
>> cuando tiene idiomas diferentes en la misma columna ... ¡Eso es todo! –
Debe tenerse en cuenta que * "idiomas diferentes" * no solo significa que diferentes filas pueden contener valores de diferentes idiomas. También significa si la intercalación predeterminada de la base de datos (es decir, la configuración regional de la máquina servidor) es diferente de la configuración regional de cualquier computadora cliente. p.ej. La máquina del servidor está configurada en 'en-US', pero mi PC está configurada en' fr-US'. –
@IanBoyd En general, la intercalación será muy problemática al mezclar idiomas en una columna y devolver elementos en múltiples idiomas en un solo conjunto y usar esa intercalación para ordenar. La intercalación también puede tener un efecto sobre los caracteres que se combinan para tratarse como uno (húngaro dz y ly): http://www.sqlservercentral.com/Forums/Topic19439-9-1.aspx http://stackoverflow.com/questions/7207590/sql-server-case-collation-issue - nvarchar no va a resolver eso –