binary e varbinary (Transact-SQL)

Si applica a:SQL Server database SQL di Azure Istanza gestita di SQL di Azure Azure Synapse Analytics AnalyticsPlatform System (PDW)SQL analytics endpoint in Microsoft FabricWarehouse in Microsoft Fabric

Tipi di dati binary a lunghezza fissa o variabile.

Argomenti

binary [ ( n ) ]

Dati binari a lunghezza fissa con lunghezza di n byte, dove n è un valore compreso tra 1 e 8.000. Le dimensioni 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 non si specifica n in un'istruzione di definizione dei dati o di dichiarazione di variabili, la lunghezza predefinita è 1. Quando n non viene specificato con la CAST funzione, la lunghezza predefinita è 30.

Tipo di dati Usare se...
binary le dimensioni delle voci di dati delle colonne sono consistenti.
varbinary le dimensioni delle voci di dati delle colonne presentano notevoli differenze.
varbinary(max) le voci di dati delle colonne superano gli 8.000 byte.

Convertire dati binari e varbinary

In caso di conversione da un tipo di dati stringa a un tipo di dati binary o varbinary di lunghezza diversa, SQL Server esegue il riempimento o il troncamento dei dati a destra. Tali tipi di dati stringa sono:

  • char
  • varchar
  • nchar
  • nvarchar
  • binary
  • varbinary
  • text
  • ntext
  • Immagine

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. A un certo punto si potrebbe convertire un tipo valore in un valore binario di dimensioni sufficienti e quindi riconvertirlo. Questa conversione genera 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.

È possibile convertire int, smallint e tinyint in binary o varbinary. Se si riconverte il valore binary in un valore intero ed è stato eseguito il troncamento, il valore ottenuto sarà diverso dal valore intero originale. L'istruzione SELECT seguente, ad esempio, mostra che il valore intero 123456 viene in genere archiviato come 0x0001e240 binario:

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.

Limiti

Attualmente, in Microsoft Fabric è supportato solo varbinary(n). I tipi di dati binary e varbinary(max) non sono supportati.

Vedi anche