binary et varbinary (Transact-SQL)
Données de type binaire de longueur fixe (binary) ou variable (varbinary).
binary [ ( n ) ]
Données binaires de longueur fixe de n octets, où n est une valeur comprise entre 1 et 8 000. La taille de stockage est égale à n octets.varbinary [ ( n | max) ]
Données binaires de longueur variable. n peut être une valeur comprise entre 1 et 8 000. max indique que l'espace mémoire maximal occupé est de 2^31-1 octets. La taille mémoire est la longueur réelle des données entrées, plus deux octets. Les données entrées peuvent avoir une longueur de 0 octet. Le synonyme SQL ANSI de varbinary est binary varying.
Notes
Lorsque la valeur de n n'est spécifiée ni dans une définition de données, ni dans une instruction de déclaration de variable, la longueur par défaut est 1. Quand la valeur de n n'est pas précisée dans la fonction CAST, la longueur par défaut est 30.
Utilisez binary lorsque les tailles des entrées de données de la colonne sont cohérentes.
Utilisez varbinary lorsque les tailles des entrées de données de la colonne varient considérablement.
Utilisez varbinary(max) lorsque la taille des entrées de données de la colonne dépasse 8 000 octets.
Conversion des données binary et varbinary
Lorsque les données sont converties d'un type de données chaîne (char, varchar, nchar, nvarchar, binary, varbinary, text, ntext ou image) en un type de données binary ou varbinary de longueur différente, SQL Server complète ou tronque la chaîne à droite. Lorsque d'autres types de données sont convertis en binary ou varbinary, les données sont complétées ou tronquées à gauche. Elles sont complétées avec des zéros hexadécimaux.
La conversion de données en types de données binary et varbinary peut être utile si les données binary constituent le moyen de déplacement de données le plus pratique. La conversion d'une valeur d'un type quelconque en valeur binaire de taille suffisante, puis sa reconversion en son type d'origine produisent toujours la même valeur si les deux conversions sont effectuées dans la même version de SQL Server. La représentation binaire d'une valeur peut varier d'une version à l'autre de SQL Server.
Vous pouvez convertir int, smallint et tinyint en binary ou varbinary, mais si vous reconvertissez la valeur binary en valeur entière, elle sera différente de la valeur entière initiale s'il y a eu troncation. Par exemple, l'instruction SELECT suivante montre que la valeur entière 123456 est généralement stockée sous forme binaire 0x0001e240 :
SELECT CAST( 123456 AS BINARY(4) );
Cependant, l'instruction SELECT suivante montre que si la cible binary est trop petite pour traiter la valeur entière, les chiffres les plus à gauche sont tronqués discrètement de façon à ce que le même nombre soit stocké en tant que 0xe240 :
SELECT CAST( 123456 AS BINARY(2) );
L'instruction suivante montre que la troncation discrète peut affecter les opérations arithmétiques sans engendrer d'erreur :
DECLARE @BinaryVariable2 BINARY(2);
SET @BinaryVariable2 = 123456;
SET @BinaryVariable2 = @BinaryVariable2 + 1;
SELECT CAST( @BinaryVariable2 AS INT);
GO
Le résultat final est 57921, et non pas 123457.
[!REMARQUE]
Les conversions entre un type de données quelconque et les types de données binary ne sont pas nécessairement identiques dans toutes les versions de SQL Server.
Voir aussi
Référence
CAST et CONVERT (Transact-SQL)
Types de données (Transact-SQL)