Dans SQL Server (et Azure), le T-SQL DATALENGTH()
renvoie le nombre d'octets utilisés pour représenter n'importe quelle expression.
Par exemple :
SELECT DATALENGTH('Lit');
Résultat :
3
Dans ce cas, il y a 3 octets dans la chaîne Lit
.
Cependant, ceci est un exemple simple. Les résultats peuvent être très différents selon le type de données.
Dans l'exemple ci-dessus, nous avons vu qu'il y a 3 octets dans le mot Lit
. Il s'agit également du nombre exact de caractères dans la chaîne. Mais si nous retournons ce même mot d'une colonne dans une base de données, nous pourrions obtenir un résultat différent. Par exemple, ceci :
SELECT ArtistName, DATALENGTH(ArtistName) AS DataLength FROM Artists WHERE ArtistName = 'Lit';
Résultat :
ArtistName DataLength ---------- ---------- Lit 6
Dans ce cas, la longueur des données est de 6.
La raison en est que, dans cette base de données particulière, la colonne a un nvarchar(255) Type de données. Le nvarchar Le type de données est une chaîne unicode, qui stocke 2 octets par caractère (ce qui double effectivement la longueur des données). Si la colonne avait plutôt utilisé varchar(255) il aurait une longueur de données de 3. Cependant, s'il avait dire, char(25) la chaîne aurait une longueur de données de 25.
De même, s'il s'agissait auparavant de char(25) mais il a ensuite été converti en varchar(255) il aurait toujours une longueur de données de 255.
Cependant, dans tous les cas, le LEN()
la fonction aurait renvoyé 3.
Espaces de fin
Le DATALENGTH()
la fonction compte les blancs de fin (par exemple, les espaces à la fin de la chaîne, les tabulations, les retours chariot, etc.).
Exemple :
SELECT DATALENGTH('Lit ');
Résultat :
4
Dans cet exemple, j'ai simplement ajouté un espace à la fin de la chaîne. C'est une autre des différences entre LEN()
et DATALENGTH()
.
Vous pouvez voir des exemples de LEN()
et DATALENGTH()
côte à côte dans LEN()
vs DATALENGTH()
.
Type de retour
Le DATALENGTH()
la fonction renvoie un type de données int , sauf si l'expression est varchar(max) , nvarchar(max) ou varbinary(max) , auquel cas il renvoie bigint .