Condividi tramite


binary e varbinary (Transact-SQL)

Si applica a:SQL ServerDatabase SQL di AzureIstanza gestita di SQL di AzureAzure Synapse AnalyticsPiattaforma di analisi (PDW)Endpoint di analisi SQL in Microsoft FabricMagazzino in Microsoft FabricDatabase SQL in Microsoft Fabric

Tipi di dati binary a lunghezza fissa o variabile.

Arguments

binario [ ( 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.

Remarks

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
  • image

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 binario in un valore intero, questo valore è diverso dal valore intero originale se si è verificata una troncazione. 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.

Note

È 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.