Поделиться через


binary и varbinary (Transact-SQL)

Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure конечной точке аналитики платформы Аналитики Azure Synapse Analytics (PDW) в Microsoft Fabric Хранилище в базе данных Microsoft Fabric SQL в Microsoft Fabric

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

Аргументы

binary [ ( n ) ]

Двоичные данные фиксированной длины с длиной n байт, где n — значение от 1 до 8 000. Размер при хранении составляет 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
  • Изображение

При преобразовании других типов данных в тип 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.

Ограничения

В настоящее время в Microsoft Fabric поддерживается только varbinary(n). Типы данных binary и varbinary(max) не поддерживаются.

См. также