Compartilhar via


binary e varbinary (Transact-SQL)

Tipos de dados binários de comprimento fixo ou comprimento variável.

Aplica-se a: SQL Server (SQL Server 2008 até a versão atual), Banco de dados SQL do Windows Azure (versão inicial até a versão atual).

Argumentos

  • binary [ ( n ) ]
    Dados binários de comprimento fixo com um comprimento de n bytes, em que n é um valor de 1 a 8.000. O tamanho de armazenamento é n bytes.

  • varbinary [ ( n | max) ]
    Dados binários de comprimento variável. n pode ser um valor de 1 a 8.000. max indica que o tamanho de armazenamento máximo é 2^31-1 bytes. O tamanho de armazenamento é o comprimento real dos dados inseridos + 2 bytes. Os dados inseridos podem ter 0 bytes de comprimento. O sinônimo ANSI SQL para varbinary é binary varying.

Comentários

Quando n não é especificado em uma definição de dados ou instrução de declaração de variável, o comprimento padrão é 1. Quando n não é especificado com a função CAST, o comprimento padrão é 30.

Use binary quando os tamanhos das entradas de dados de coluna forem consistentes.

Use varbinary quando os tamanhos das entradas de dados de coluna variarem consideravelmente.

Use varbinary(max) quando as entradas de dados de coluna excederem 8.000 bytes.

Convertendo dados binary e varbinary

Quando são convertidos dados de um tipo de dados de cadeia de caracteres (char, varchar, nchar, nvarchar, binary, varbinary, text, ntext ou image) em um tipo de dados binary ou varbinary de comprimento diferente, o SQL Server preenche ou trunca os dados à direita. Quando são convertidos outros tipos de dados em binary ou varbinary, os dados são preenchidos ou truncados à esquerda. O preenchimento é realizado por meio de zeros hexadecimais.

A conversão de dados em tipos de dados binary e varbinary será útil se os dados binary forem o modo mais fácil para mover os dados. A conversão de qualquer valor de qualquer tipo a um valor binário de tamanho grande o bastante e, depois, de volta para o tipo, sempre resultará no mesmo valor se ambas as conversões estiverem acontecendo na mesma versão do SQL Server. A representação binária de um valor pode ser alterada de uma versão para outra do SQL Server.

Você pode converter int, smallint e tinyint em binary ou varbinary, mas se você converter o valor binary de volta para um valor inteiro, esse valor será diferente do valor inteiro original se houver truncamento. Por exemplo, a instrução SELECT a seguir mostra que o valor inteiro 123456 normalmente é armazenado como um binário 0x0001e240:

SELECT CAST( 123456 AS BINARY(4) );

Entretanto, a seguinte instrução SELECT mostra que se o destino binary for muito pequeno para manter o valor inteiro, os dígitos à esquerda serão silenciosamente truncados de forma que o mesmo número seja armazenado como 0xe240:

SELECT CAST( 123456 AS BINARY(2) );

O lote seguinte mostra que esse truncamento silencioso pode afetar operações aritméticas sem gerar um erro:

DECLARE @BinaryVariable2 BINARY(2);

SET @BinaryVariable2 = 123456;
SET @BinaryVariable2 = @BinaryVariable2 + 1;

SELECT CAST( @BinaryVariable2 AS INT);
GO

O resultado final é 57921, não 123457.

Dica

As conversões entre qualquer tipo de dados e os tipos de dados binary não têm garantia de serem as mesmas entre as versões do SQL Server.

Consulte também

Referência

CAST e CONVERT (Transact-SQL)

Tipos de dados (Transact-SQL)

Conceitos

Conversão de tipo de dados (Mecanismo de Banco de Dados)