Quels sont les avantages et les inconvénients de l'utilisation des types de données nvarchar(max)
vs NText
dans SQL Server? Je n'ai pas besoin de compatibilité descendante, c'est donc très bien que ce nvarchar(max)
ne soit pas pris en charge dans les anciennes versions de SQL Server.
Edit: Apparemment, la question s'applique également à TEXT
et IMAGE
contre varchar(max)
et varbinary(max)
, pour ceux qui recherchent ces types de données plus tard.
la source
VARCHAR(MAX)
est assez grand pour accueillir leTEXT
terrain.TEXT
,NTEXT
Et lesIMAGE
types de données de SQL Server 2000 seront dépréciés dans la version future de SQL Server, SQL Server 2005 fournit une compatibilité avec les types de données , mais il est recommandé d'utiliser de nouveaux types de données qui sontVARCHAR(MAX)
,NVARCHAR(MAX)
etVARBINARY(MAX)
.la source
ntext
stockera toujours ses données dans une page de base de données distincte, toutnvarchar(max)
en essayant de stocker les données dans l'enregistrement de base de données lui-même.C'est donc
nvarchar(max)
un peu plus rapide (si vous avez un texte de moins de 8 ko). J'ai également remarqué que la taille de la base de données augmentera légèrement plus lentement, c'est également une bonne chose.Allez
nvarchar(max)
.la source
nvarchar(max)
est ce que vous souhaitez utiliser. Le plus grand avantage est que vous pouvez utiliser toutes les fonctions de chaîne T-SQL sur ce type de données. Ce n'est pas possible avecntext
. Je n'ai connaissance d'aucun inconvénient réel.la source
nvarchar(max)
mais cela me limite à 4000 caractères. Et si je veux qu'un champ contienne plus que cela?nvarchar(max)
à 4000 caractères. Donc pour SQL Server Compact, je n'ai pas d'autre choix que de l'utiliserntext
dans certains cas. Quand ils arrêteront, je suppose que je devrai simplement ne pas mettre à niveau certains sites.Vous devriez apparemment utiliser
nvarchar(max)
:MSDN
la source
Le plus gros inconvénient de
Text
(avecNText
etImage
) est qu'il sera supprimé dans une future version de SQL Server, comme dans la documentation . Cela rendra effectivement votre schéma plus difficile à mettre à niveau lorsque cette version de SQL Server sera publiée.la source
Je voulais ajouter mon expérience avec la conversion. J'avais de nombreux
text
champs dans l'ancien code Linq2SQL. C'était pour permettre auxtext
colonnes présentes dans les index d'être reconstruites EN LIGNE .D'abord, je connais les avantages depuis des années, mais j'ai toujours supposé que la conversion signifierait de longues requêtes effrayantes où SQL Server devrait reconstruire la table et tout copier, abattre mes sites Web et augmenter mon rythme cardiaque.
Je craignais également que Linq2SQL puisse provoquer des erreurs s'il effectuait une sorte de vérification du type de colonne.
Heureux de signaler cependant que les commandes ALTER sont retournées INSTANTANÉMENT - donc elles ne changent certainement que les métadonnées de la table. Il peut y avoir du travail hors ligne pour ramener <8000 caractères de données dans la table, mais la commande ALTER a été instantanée.
J'ai couru ce qui suit pour trouver toutes les colonnes nécessitant une conversion:
SELECT concat('ALTER TABLE dbo.[', table_name, '] ALTER COLUMN [', column_name, '] VARCHAR(MAX)'), table_name, column_name FROM information_schema.columns where data_type = 'TEXT' order by table_name, column_name SELECT concat('ALTER TABLE dbo.[', table_name, '] ALTER COLUMN [', column_name, '] NVARCHAR(MAX)'), table_name, column_name FROM information_schema.columns where data_type = 'NTEXT' order by table_name, column_name
Cela m'a donné une belle liste de requêtes, que je viens de sélectionner et de copier dans une nouvelle fenêtre. Comme je l'ai dit, cela a été instantané.
Linq2SQL est assez ancien - il utilise un concepteur sur lequel vous faites glisser des tables. La situation peut être plus complexe pour EF Code d'abord, mais je ne l'ai pas encore abordé.
la source
Je tiens à ajouter que vous pouvez utiliser la clause .WRITE pour les mises à jour partielles ou complètes et les ajouts haute performance aux
varchar(max)/nvarchar(max)
types de données.Ici vous pouvez trouver un exemple complet de
.WRITE
clause using .la source