varchar ou nvarchar

Je stocke le prénom et le nom avec jusqu'à 30 caractères chacun. Quel est le meilleur varchar ou nvarchar .

J'ai lu que nvarchar occupe deux fois plus d'espace par rapport à varchar et que nvarchar est utilisé pour l'internationalisation.

Alors, que suggérez-vous dois-je utiliser: nvarchar ou varchar ?

Aussi s'il vous plaît laissez-moi savoir sur la performance des deux. La performance pour les deux est la même ou ils diffèrent en performance. Parce que l'espace n'est pas trop gros problème. La question est la performance.

Fondamentalement, nvarchar signifie que vous pouvez gérer beaucoup d'alphabets, pas seulement l'anglais régulier. Techniquement, cela signifie un support Unicode, pas seulement ANSI. Cela signifie des caractères double largeur ou environ deux fois l'espace. Ces jours l'espace disque est si bon marché que vous pourriez aussi bien utiliser nvarchar depuis le début plutôt que de passer par la douleur d'avoir à changer pendant la vie d'un produit.

Si vous êtes sûr que vous aurez seulement besoin de prendre en charge une langue que vous pourriez coller avec varchar, sinon j'irais avec nvarchar.

Cela a été discuté sur SO avant ici .

EDITED: changé ascii à ANSI comme indiqué dans le commentaire.

Tout d'abord, pour clarifier, nvarchar stocke datatables unicode tandis que varchar stocke datatables ANSI (8 bits). Ils fonctionnent à l'identique mais nvarchar occupe deux fois plus d'espace.

En règle générale, je préfère stocker les noms d'user en utilisant les types de données varchar sauf si ces noms ont des caractères qui tombent hors de la limite des caractères que varchar peut stocker.

Cela dépend aussi de la collation de la database. Par exemple, vous ne serez pas en mesure de stocker des caractères russes dans un champ varchar , si votre classment de database est LATIN_CS_AS . Mais, si vous travaillez sur une application locale, qui ne sera utilisée qu'en Russie, vous devez définir le classment de la database en russe. Ce que cela va faire, c'est qu'il vous permettra d'entrer des caractères russes dans un champ varchar , en économisant de l'espace.

Mais, de nos jours, la plupart des applications développées sont internationales, vous devez donc décider vous-même de tous les users qui s'inscriront et, en fonction de cela, décider du type de données.

J'ai rouge que nvarchar prend deux fois comme varchar.

Oui.

nvarchar est utilisé pour l'internationalisation.

Oui.

Que suggérez-vous dois-je utiliser nvarchar ou varchar?

Cela dépend de l'application.

Par défaut, allez avec nvarchar. Il y a très peu de raison d'aller avec varchar ces jours-ci, et toutes les raisons d'aller avec nvarchar (permet des caractères internationaux, comme discuté).

varchar est à 1 octet par caractère, nvarchar à 2 octets par caractère.

Vous utiliserez plus d'espace avec nvarchar mais il y a beaucoup plus de caractères autorisés. L'espace supplémentaire est négligeable, mais vous risquez de manquer ces caractères supplémentaires dans le futur. Même si vous ne pensez pas avoir besoin d'internationalisation, les gens auront souvent des caractères non-anglais (eg, é, ñ ou ö) dans leurs noms.

Je suggère que vous utilisiez nvarchar.

J'ai rouge que nvarchar prend deux fois comme varchar

Oui. Selon Microsoft: "La taille du stockage, en octets, est deux fois le nombre de caractères entrés + 2 octets" ( http://msdn.microsoft.com/en-us/library/ms186939(SQL.90).aspx ).

Mais le stockage est bon marché; Je ne m'inquiète jamais de quelques octets supplémentaires.

Aussi, sauvez-vous des problèmes dans le futur et définissez les largeurs maximales à quelque chose de plus généreux, comme 100 caractères. Il n'y a absolument aucun surcoût de stockage lorsque vous utilisez varchar ou nvarchar (par opposition à char / nchar). Vous ne savez jamais quand vous allez rencontrer un nom de famille à trois tonneaux ou un nom étranger long qui dépasse 30 caractères.

nvarchar est utilisé pour l'internationalisation.

nvarchar peut stocker n'importe quel caractère Unicode, tel que des caractères provenant de scripts non latins (arabe, chinois, etc.). Je ne sais pas comment votre application va prendre des données (via le web, via une boîte à outils graphique, etc.) mais il est probable que la technologie que vous utilisez prenne en charge le format Unicode. Cela signifie que pour toutes datatables saisies par l'user (comme le nom), il y a toujours la possibilité de recevoir des caractères non latins, sinon maintenant, dans le futur.

Si je construisais une nouvelle application, j'utiliserais nvarchar. Appelez-le "l'épreuve de l'avenir" si vous le souhaitez.

Le type nvarchar est Unicode, donc il peut gérer à peu près tous les caractères qui existent dans toutes les langues de la planète. Les caractères sont stockés en tant que UTF-16 ou UCS-2 (vous ne savez pas lequel, et les différences sont subtiles), de sorte que chaque caractère utilise deux octets.

Le type varchar utilise un jeu de caractères de 8 bits, il est donc limité aux 255 caractères du jeu de caractères que vous choisissez pour le champ. Il existe différents jeux de caractères qui traitent différents groupes de caractères, il est donc généralement suffisant pour le text local d'un pays ou d'une région.

Si varchar fonctionne pour ce que vous voulez faire, vous devriez l'utiliser. C'est un peu less de données, donc c'est globalement un peu plus rapide. Si vous devez gérer une grande variété de caractères, utilisez nvarchar.

en performance:
une raison pour utiliser varchar sur nvarchar est que vous pouvez avoir deux fois plus de caractères dans vos index! les keys d'index sont limitées à 900 octets
sur la convivialité:
si l'application est uniquement destinée à un public anglais et contient des noms anglais, utilisez varchar

Données à stocker: "Sunil"

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