binary e varbinary (Transact-SQL)
Tipi di dati binary a lunghezza fissa o variabile.
binary [ ( n ) ]
Dati binari a lunghezza fissa con lunghezza di n byte, dove n rappresenta un valore compreso tra 1 e 8.000. Le dimensioni dello spazio di archiviazione corrispondono a n byte.varbinary [ ( n | max) ]
Dati binary a lunghezza variabile. n può essere un valore compreso tra 1 e 8.000. max indica che la capacità di memorizzazione massima è di 2^31-1 byte. Le dimensioni dello spazio di archiviazione corrispondono alla lunghezza effettiva dei dati immessi + 2 byte. È possibile che la lunghezza dei dati immessi sia pari a 0 byte. L'equivalente di ANSI SQL per varbinary è binary varying.
Osservazioni
Se n viene omesso in un'istruzione di definizione dei dati o di dichiarazione di variabili, la lunghezza predefinita è 1. Se n non è specificato tramite la funzione CAST, la lunghezza predefinita è 30.
Utilizzare binary quando le dimensioni delle voci di dati delle colonne sono consistenti.
Utilizzare varbinary quando le dimensioni delle voci di dati delle colonne presentano notevoli differenze.
Utilizzare varbinary(max) quando le voci di dati delle colonne superano gli 8.000 byte.
Conversione dei dati di tipo binary e varbinary
Nella conversione da un tipo di dati string (char, varchar, nchar, nvarchar, binary, varbinary, text, ntext o image) a un tipo di dati binary o varbinary di lunghezza variabile, SQL Server esegue il riempimento o il troncamento dei dati a destra. Nella conversione di altri tipi di dati nel tipo binary o varbinary, viene eseguito il riempimento o il troncamento dei dati a sinistra. Il riempimento viene eseguito utilizzando zero esadecimali.
La conversione nei tipi di dati binary e varbinary è utile quando i dati binary risultano i dati più semplici da spostare. Quando un valore di qualsiasi tipo viene convertito in un valore binary di dimensioni sufficienti e successivamente riconvertito nel tipo dati iniziale, si ottiene sempre lo stesso valore se entrambe le conversioni vengono eseguite nella stessa versione di SQL Server. La rappresentazione binaria di un valore può variare da una versione all'altra di SQL Server.
La conversione del tipo di dati int, smallint o tinyint nel tipo di dati binary o varbinary è supportata. Se è stato eseguito il troncamento e il valore binary viene riconvertito in un valore integer, il valore ottenuto sarà diverso dal valore integer originale. L'istruzione SELECT seguente, ad esempio, mostra che il valore intero 123456 viene in genere archiviato come un dato di tipo binary 0x0001e240:
SELECT CAST( 123456 AS BINARY(4) );
L'istruzione SELECT seguente illustra il troncamento automatico delle cifre iniziali se il valore di destinazione binary è troppo piccolo per l'archiviazione dell'intero valore, in modo che lo stesso numero possa essere archiviato sotto forma di 0xe240:
SELECT CAST( 123456 AS BINARY(2) );
Il batch seguente illustra come il troncamento automatico possa influire sulle operazioni aritmetiche senza tuttavia generare errori:
DECLARE @BinaryVariable2 BINARY(2);
SET @BinaryVariable2 = 123456;
SET @BinaryVariable2 = @BinaryVariable2 + 1;
SELECT CAST( @BinaryVariable2 AS INT);
GO
Il risultato finale è 57921, non 123457.
[!NOTA]
È possibile che le conversioni da un tipo di dati ai tipi di dati binary e viceversa eseguite in versioni diverse di SQL Server producano risultati diversi.