binary и varbinary (Transact-SQL)
Применимо к: SQL Server Azure SQL Database
Управляемый экземпляр SQL Azure
Azure Synapse Analytics Analytics
Platform System (PDW)
Типы двоичных данных фиксированной или переменной длины.
Аргументы
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 | Данные в столбце значительно различаются по размеру. |
varbinary(max) | Длина элементов данных в столбце превышает 8000 байт. |
Преобразование двоичных и varbinary данных
При преобразовании данных из строкового типа данных в тип binary или varbinary разной длины SQL Server дополняет или усекает данные справа. Строковые типы данных:
- char
- varchar
- nchar
- nvarchar
- binary
- varbinary
- text
- ntext
- image
При преобразовании других типов данных в тип 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.