nvarchar(max) vs NText
Quels sont les avantages et les inconvénients de l'utilisation de la nvarchar(max)
vs NText
types de données dans SQL Server? Je n'ai pas besoin de compatibilité descendante, donc c'est bien que nvarchar(max)
n'est pas pris en charge dans les anciennes versions SQL Server.
Edit: Apparemment, la question vaut également pour TEXT
et IMAGE
vs varchar(max)
et varbinary(max)
, pour ceux à la recherche de ces types de données plus tard.
Vous devez vous connecter pour publier un commentaire.
Les avantages sont que vous pouvez utiliser des fonctions comme
LEN
etLEFT
surnvarchar(max)
et vous ne pouvez pas le faire contrentext
ettext
. Il est également plus facile de travailler avecnvarchar(max)
quetext
où vous avez eu à utiliserWRITETEXT
etUPDATETEXT
.Aussi,
text
,ntext
, etc., sont désapprouvés (http://msdn.microsoft.com/en-us/library/ms187993.aspx)VARCHAR(MAX)
est assez grand pour accueillirTEXT
champ.TEXT
,NTEXT
etIMAGE
types de données de SQL Server 2000 sera obsolète dans une future version de SQL Server, SQL Server 2005 offre une compatibilité descendante pour les types de données, mais il est recommandé d'utiliser de nouveaux types de données qui sontVARCHAR(MAX)
,NVARCHAR(MAX)
etVARBINARY(MAX)
.ntext
toujours stocker ses données dans une base de données distincte de la page, tandis quenvarchar(max)
allons essayer de stocker les données dans l'enregistrement de base de données elle-même.Donc
nvarchar(max)
est un peu plus rapide (si vous avez un texte qui est plus petit que 8 ko). J'ai aussi remarqué que la taille de base de données augmentera légèrement plus lent, c'est aussi bon.Aller
nvarchar(max)
.nvarchar(max)
est ce que vous voulez utiliser. Le plus grand avantage est que vous pouvez utiliser tous les T-SQL fonctions de chaîne sur ce type de données. Ce n'est pas possible avecntext
. Je ne suis pas au courant de tout inconvénient réel.nvarchar(max)
mais qui me limite à 4 000 caractères. Que faire si je veux un champ de tenir plus que ça?nvarchar(max)
à 4000 caractères. Donc pour SQL Server Compact, je n'ai pas d'autre choix que d'utiliserntext
dans certains cas. Quand ils l'arrêter, je suppose que je vais juste de pas de mise à niveau de certains sites.Vous devriez apparemment utilisation
nvarchar(max)
:MSDN
Le plus grand inconvénient de
Text
(avecNText
etImage
), c'est qu'il sera supprimée dans une future version de SQL Server, comme par la documentation. Qui aura pour effet de rendre votre schéma plus difficile de mettre à niveau lorsque cette version de SQL Server sera libéré.Je tiens à ajouter que vous pouvez utiliser le .ÉCRIRE clause partielle ou complète des mises à jour et de haute performance ajoute à
varchar(max)/nvarchar(max)
types de données.Ici vous pouvez trouver plein d'exemple de l'utilisation de
.WRITE
clause.Voulais ajouter à mon expérience de la conversion. J'ai eu beaucoup de
text
champs dans l'ancienne Linq2SQL code. C'était pour permettretext
colonnes présentent des indices à reconstruit en LIGNE.Premier que j'ai connu sur les bénéfices pendant des années, mais toujours supposé que la conversion auraient certaines effrayant long de requêtes SQL Server serait de reconstruire la table et tout copier sur, ramener mes sites web et d'élever ma fréquence cardiaque.
J'étais inquiète également de ce que la Linq2SQL pourrait provoquer des erreurs si c'était de faire une sorte de vérification de la colonne type.
Heureux de signaler cependant, que l'ALTER commandes renvoyé INSTANTANÉMENT, de sorte qu'ils sont certainement uniquement la modification des métadonnées de la table. Il existe peut-être travailler hors connexion passe pour amener <8000 caractères des données de retour d'être à table, mais la commande ALTER a été instantanée.
J'ai couru à la suite de trouver toutes les colonnes besoin de conversion:
Cela m'a donné une belle liste de requêtes, dont il vient d'être sélectionné et copié dans une nouvelle fenêtre. Comme je l'ai dit - de l'exécution de cette a été instantanée.
Linq2SQL est assez ancien, il utilise un concepteur que vous faites glisser sur les tables. La situation peut être plus complexe pour les EF premier Code, mais je n'ai pas abordé encore.