Vous devez utiliser NVARCHAR chaque fois que vous devez stocker plusieurs langues. Je crois que vous devez l'utiliser pour les langues asiatiques, mais ne me cite pas.
Voici le problème : si vous prenez le russe par exemple et que vous le stockez dans un varchar, tout va bien tant que vous définissez la page de code correcte. Mais disons que vous utilisez une installation sql anglaise par défaut, alors les caractères russes ne seront pas traités correctement. Si vous utilisiez NVARCHAR(), ils seraient traités correctement.
Editar
Ok, laissez-moi vous citer MSDN et peut-être que j'étais trop spécifique mais vous ne voulez pas stocker plus d'une page de code dans une colonne de varcar, bien que vous puissiez le faire, vous ne devriez pas le faire.
Lorsque vous traitez des données textuelles qui sont stockées dans les formats char, varchar varchar(max), ou text, la limitation la plus importante limitation la plus importante à prendre en compte est que seules les informations d'une seule page de code peuvent être validées par le système. (Vous pouvez stocker des données provenant de plusieurs pages de codes, mais cela n'est pas recommandé). La page de codes exacte utilisée pour valider et stocker les données dépend de la collation de la colonne. Si une collation au niveau de la colonne n'a pas été définie, la collation de la base de données est utilisée. Pour déterminer la page de code qui est utilisée pour une colonne donnée, vous pouvez utiliser la fonction COLLATIONPROPERTY comme le montrent les exemples de code suivants exemples de code suivants :
En voici d'autres :
Cet exemple illustre le fait que de nombreux locaux, tels que le géorgien et le l'hindi, n'ont pas de pages de code, car elles sont sont des collations Unicode uniquement. Ces collations ne sont pas appropriées pour les colonnes qui utilisent le type de données char, varchar ou type de données texte
Ainsi, le géorgien ou l'hindi doivent vraiment être stockés sous forme de nvarchar. L'arabe pose également un problème :
Un autre problème que vous pouvez rencontrer est l'impossibilité de stocker des données lorsque pas tous les caractères que vous souhaitez sont contenus dans la page de code. page. Dans de nombreux cas, Windows considère une page de codes particulière comme étant la "meilleure page de code "best fit", ce qui signifie qu'il n'y a garantie que vous pouvez compter sur cette page page de code pour traiter tout le texte ; il s'agit simplement la meilleure page de code disponible. Un exemple exemple de ceci est le script arabe : il supporte un large éventail de langues, dont le baloutche, le berbère, le farsi, Cachemiri, Kazakh, Kirghiz, Pashto, le sindhi, l'ouïgour, l'ourdou, etc. Toutes ces ces langues ont des caractères supplémentaires caractères supplémentaires en plus de ceux de la langue arabe tels que définis dans le code Windows page 1256 du code Windows. Si vous essayez de stocker ces caractères supplémentaires dans une colonne non-Unicode qui a la collation arabe arabe, ces caractères sont convertis en points d'interrogation.
Il faut garder à l'esprit que si vous utilisez l'Unicode, bien que vous puissiez stocker différentes langues dans une seule colonne, vous ne pouvez trier qu'en utilisant une seule collation. Il existe des langues qui utilisent des caractères latins mais qui ne sont pas triées comme les autres langues latines. Les accents en sont un bon exemple, je ne me souviens plus de l'exemple mais il y avait une langue d'Europe de l'Est dont le Y n'était pas trié comme le Y anglais. Il y a aussi le ch espagnol que les utilisateurs espagnols considèrent comme trié après le h.
Dans l'ensemble, avec tous les problèmes que l'on rencontre lorsqu'on traite de l'internalisation. Je pense qu'il est plus facile d'utiliser les caractères Unicode dès le départ, d'éviter les conversions supplémentaires et de prendre le risque de perdre de l'espace. D'où ma déclaration précédente.
0 votes
Les deux questions les plus votées sont mauvais . Cela n'a rien à voir avec le fait de "stocker des langues différentes/multiples". Vous pouvez prendre en charge les caractères espagnols comme
ñ
et anglais, avec juste un varchar commun.0 votes
Je viens de poster une réponse expliquant et fournissant également une approche actualisée sur la façon de traiter ce problème.