De this Microsoft doc, +
n définit la longueur de la chaîne et peut être une valeur comprise entre 1 et 8 000. max indique que la taille de stockage maximale est de 2 ^ 31-1 octets (2 Go). La taille de stockage est la longueur réelle des données entrées + 2 octets.
Veuillez m'aider à comprendre cela.
Le nombre maximal de caractères pour varchar semble être 8000
, Ce qui représente bien moins que 2GB
De données.
Je vois qu'il y a des enregistrements dans cette colonne varchar(max)
d'une table spécifique qui ont len(mycolumn)
> 100 000. Ainsi je sais que je peux obtenir bien plus que 8000
Caractères en une colonne varchar(max)
.
Question 1: Comment les caractères 8000
Entrent-ils en jeu et où dois-je en être conscient?
Question 2 : une requête de lecteur de données .net vers cette colonne renverra-t-elle toujours le résultat complet avec 100 000+ caractères?
Je peux voir pourquoi vous comprenez mal cela - c'est un peu délicat. Ce sont tous valables:
Et oui, si vous essayez d'extraire des données d'un champ VARCHAR (MAX) et que quelqu'un y stocke 2 Go, attachez votre ceinture.
Question 1: Comment les 8000 personnages entrent-ils en jeu et où dois-je en être conscient?
Si n est défini sur 8000, 8000 caractères entrent en jeu. Vous devez connaître les références Précision, Échelle et Longueur (Transact-SQL) concernant char, nchar, nvarchar et varchar. En revanche, si n est défini sur max (sans guillemets), SQL Server stocke (et renvoie) le nombre maximal d'octets (comme indiqué dans votre devis).
Question 2: une requête de lecteur de données .net dans cette colonne retournera-t-elle toujours le résultat complet avec 100 000+ caractères?
Il s'agit d'une question .Net (pas un serveur SQL), mais le datareader .Net récupère un flux d'octets. Un octet n'est pas un caractère et SQL Server renvoie des octets (pas des caractères). Si n est défini sur 8000 et que le type de données est nvarchar, SQL Server retourne jusqu'à 8000 octets, ce que le lecteur de données .Net peut interpréter comme 4000 caractères Unicode. Si n est défini sur 8000 et que le type de données est varchar, SQL Server renvoie jusqu'à 8 000 octets, ce que le lecteur de données .Net peut interpréter comme pouvant contenir jusqu'à 8 000 caractères ANSI. Si n est défini sur max et que le type de données est nvarchar, SQL Server renvoie jusqu'à 2 ^ 31-1 octets, ce que le lecteur de données .Net peut interpréter comme comportant jusqu'à (2 ^ 31-1)/2 caractères. Si n est défini sur max et que le type de données est varchar, SQL Server renvoie jusqu'à 2 ^ 31-1 octets, ce que le lecteur de données .Net peut interpréter comme pouvant contenir jusqu'à 2 ^ 31-1 caractères ANSI.
Si vous choisissez d'utiliser char ou varchar (au lieu de nchar ou nvarchar) car ils peuvent stocker plus de "caractères" (plus précisément: octets), vous devez être conscient que de nombreux caractères Unicode n'ont pas de caractère ANSI équivalent (donc une grande partie de notre les utilisateurs du monde ne pourront pas voir leurs caractères localisés/natifs dans votre application).