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)