binary и varbinary (Transact-SQL)

Типы двоичных данных фиксированной или переменной длины.

Применимо для следующих объектов: SQL Server (SQL Server 2008 по текущую версию), База данных SQL Windows Azure (С первоначального выпуска по текущий выпуск).

Аргументы

  • binary [ ( n ) ]
    Двоичные данные фиксированной длины размером в n байт, где n — значение от 1 до 8000. Размер при хранении составляет n байт.

  • varbinary [ ( n | max) ]
    Двоичные данные с переменной длиной. n может иметь значение от 1 до 8000. max указывает, что максимальный размер при хранении составляет 2^31-1 байт. Размер хранения — это фактическая длина введенных данных плюс 2 байта. Введенные данные могут иметь размер 0 символов. В ANSI SQL синонимом для varbinary является binary varying.

Замечания

Если значение n при определении данных или в инструкции объявления переменной не указано, длина по умолчанию равна 1. Если n не указан в функции CAST, длина по умолчанию составляет 30.

Тип binary применяется в тех случаях, когда размер данных в столбце поддается предварительной оценке.

Если же размер данных в столбце заранее определить трудно, пользуйтесь типом varbinary.

Если элементы данных в столбце превышают в длину 8000 байт, пользуйтесь типом данных varbinary(max).

Преобразование типов данных binary и varbinary

При преобразовании данных строкового типа (char, varchar, nchar, nvarchar, binary, varbinary, text, ntext или image) в тип данных binary или varbinary неравной длины SQL Server дополняет или усекает данные справа. При преобразовании других типов данных в тип binary или varbinary данные дополняются или усекаются слева. Дополнение осуществляется шестнадцатеричными нулями.

Если для обмена данными лучше всего подходит тип binary, то другие типы данных удобнее всего будет преобразовать в binary или varbinary. Преобразование любого достаточно большого значения в двоичное и обратно всегда дает первоначальное значение, если оба преобразования выполняются в одной и той же версии SQL Server. Двоичное представление значения может меняться в зависимости от версии SQL Server.

Типы данных int, smallint и tinyint можно преобразовать в тип binary или varbinary, но если преобразовать значение binary обратно в целочисленное, то оно будет отличаться от исходного в случае усечения. Например, в следующей инструкции SELECT показано, что целочисленное значение 123456 обычно хранится как двоичное 0x0001e240:

SELECT CAST( 123456 AS BINARY(4) );

Однако в следующей инструкции SELECT показано, что если целевой тип binary слишком мал для хранения всего значения, то начальные цифры неявно усекаются и то же самое число хранится как 0xe240:

SELECT CAST( 123456 AS BINARY(2) );

В следующем пакете показано, что это необъявленное усечение может повлиять на арифметические операции без возникновения ошибки.

DECLARE @BinaryVariable2 BINARY(2);

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

SELECT CAST( @BinaryVariable2 AS INT);
GO

Окончательный результат — 57921, но не 123457.

Примечание

Преобразование любого типа данных в binary может различаться в зависимости от версии SQL Server.

См. также

Справочник

Функции CAST и CONVERT (Transact-SQL)

Типы данных (Transact-SQL)

Основные понятия

Преобразование типов данных (компонент Database Engine)