web-dev-qa-db-fra.com

Remplacez le type de données varchar par nvarchar dans la base de données SQL Server 2005 existante. Quelque problème que ce soit?

J'ai besoin de changer les types de données de colonne dans une table de base de données de varchar à nvarchar afin de prendre en charge les caractères chinois (actuellement, les champs varchar qui ont ces caractères affichent uniquement des points d'interrogation ).

Je sais comment changer les valeurs, mais je veux voir si c'est sûr de le faire. Y a-t-il quelque chose à surveiller avant de changer? Merci!

27
proggrock

Notez que cette modification est une mise à jour de la taille des données, voir colonnes de table SQL Server sous le capot . Le changement ajoutera une nouvelle colonne NVARCHAR, il mettra à jour chaque ligne en copiant le dta de l'ancien VARCHAR vers la nouvelle colonne NVARCHAR, puis il marquera l'ancienne colonne VARCHAR comme supprimée. SI la table est grande, cela générera un journal volumineux, alors soyez prêt pour cela. Après la mise à jour, exécutez DBCC CLEANTABLE pour récupérer l'espace utilisé par l'ancienne colonne VARCHAR. Si vous pouvez vous le permettre, mieux vaut exécuter ALTER TABLE ... REBUILD, qui non seulement récupérera l'espace, mais supprimera également complètement la colonne VARCHAR physique supprimée. L'article lié au début contient plus de détails.

Vous pouvez également souhaiter activer Compression Unicode pour votre table.

32
Remus Rusanu

Vous pouvez faire sur des champs de clé non primaire:

ALTER TABLE [TableName]
ALTER COLUMN [ColumnName] nvarchar(N) null

Sur les champs de clé primaire, cela ne fonctionnera pas - vous devrez recréer la table

30
Lucas

Assurez-vous que la longueur ne dépasse pas 4000 car le maximum pour VARCHAR est 8000 tandis que NVARCHAR n'est que 4K.

7
Garrett Vlieger

La table s'agrandira. Chaque personnage de la colonne prendra deux fois plus d'espace pour être stocké. Vous pourriez ne pas remarquer à moins que la table soit vraiment grande.

Les procédures/vues/requêtes stockées qui fonctionnent avec les données de la colonne peuvent avoir besoin d'être modifiées pour gérer le nvarchar.

3
Scott Bruns

Vérifiez toutes les dépendances pour cette table car les procs, fonctions, tables temporaires stockées basées sur cette table et les variables utilisées pour les insertions/mises à jour, etc. doivent également être mises à jour vers NVARCHAR. Vérifiez également si la table est en cours de réplication! Cela pourrait vous causer de nouveaux problèmes!

2
Andy Robertson