Для хранения бинарных значений или литералов фиксированной длины без добавления дополнительных нулевых байтов или обрезкт хвостовых 0 байтов используйте тип данных Varbinary. Для хранения бинарных значений неопределенной длины используйте вместо этого типа данных тип данных Blob. Для получения более подробной информации смотрите описание Тип данных Blob.

Бинарные литералы начинаются с префикса, 0h, за которым следует строка шестнадцатиричных чисел, которые не заключены в кавычки по сравнению с символьными строками. Приведенный ниже списко включает в себя примеры бинарных литералов:

Бинарные литералы ограничены 255-ми кодированными байтами. Поля типа Varbinary ограничены 254-мя кодированными байтами.

Когда производится операции сравнения или связывания, такие как =, !=, ==, >, >=, <=, + и -, результат их варьируется в зависимости от операции и порядка типов в операциях. Когда вы соединяете два бинарных значения, результат также будет бинарным. Когда вы соединяете переменные типа Varbinary (Q) с типами Varchar (V) или Character (C) результат будет иметь тип данных первого элемента в списке соединения элементов. Например:

V + Q = V

Q + V = Q

Когда вы сравниваете типы Varbinary и Character операцией управляет тип левой стороны. Например, предположим выражение сравнения, такое как приведено ниже, на бинарной основе:

Q = V

Visual FoxPro оценивает эти значения на побайтной основе, и результат будет тем же самым, что производится кодом CAST(V AS Q(n) = Q.

Теперь предположим, что выражение сранения основывается на символах:

V = Q

Visual FoxPro оценивает эти выражения, как будто бы они символьные строки, и результат будет тем же самым, что производится кодом CAST(Q AS V(n) = V.

Индексные ключи, основанные на полях Varbinary или выражениях дополняются нулями справа до значения, определяемого максимальной длиной поля. Например, значения 0hAA, 0hAA00, и 0hAA000 имеют один и тот же индексный ключ 0hAA0000. Используемая по умолчанию последовательность сопоставления (collation sequence) для индексных ключей, основанных на бинарных выражения, является MACHINE. Другие последовательности сопоставления не разрешены. Для получения более подробной информации смотрите описания Команда INDEX и Индексы, основанные на выражениях.

Expand image Поддержка типа данных Varbinary

Поддержка типа Varbinary обеспечивается в контейнерах баз данных (.dbc), свободных таблицах, курсорах и представлениях. Например, вы можете выбрать этот тип для поля на закладке Fields в дизайнере таблиц. Таблицы могут содержать множество полей Varbinary. Вы можете указать значение по умолчанию и нулевые значения для полей Varbinary. Поля Varbinary поддерживают правила проверки уровня поля.

Для данных типа Varbinary не производится трансляция кодовой страницы.

Тип данных Varbinary не поддерживается перечисленными ниже опциями и функциями :

Приведенные ниже функции удаляют ведущие и хвостовые нулевые байты из бинарных значений:

Ниже приведен список элементов языка, которые содержат выполняемые функции, на которые оказывает влияние тип данных Varbinary.

 
NoteЗамечание

Значения с типом Varbinary не совместимы с бинарными выражениями, производимыми функцией BINTOC( ) или используемыми функцией CTOBIN( ). Строковые функции, которые обычно возвращают строки, такие как функция SUBSTR( ) , теперь возвращают бинарные значения, когда им посылаются бинарные значения.

Для получения более подробных спецификаций по типу данных Varbinary смотрите описание Типы данных и полей Visual FoxPro.

Приведенный ниже пример очищает главное окно Visual FoxPro с помощью команды CLEAR и создает курсор с полем, названным myVarbinaryField с типом данных Varbinary, с помощью команды SQL CREATE CURSOR. Для каждого предложения SQL INSERT команда INSERT вставляет в курсор строку, содержащую бинарный литерал в поле myVarbinary. GO TOP позиционирует курсор на первую запись. Цикл DO WHILE отображает число символов в поле для каждой строки с помощью функции LEN( ) до тех пор, пока не будет достигнута последняя записб в таблице.

Вы можете перепечатать пример в программный файл (.prg) и запустить его в командном окне с помощью команды DO.

  CopyCode imageСкопировать код
CLEAR
CREATE CURSOR myCursor (myVarbinaryField Q(10))
INSERT INTO myCursor (myVarbinaryField) VALUES (0h616161202020)
INSERT INTO myCursor (myVarbinaryField) VALUES (0hABCDEF)
INSERT INTO myCursor (myVarbinaryField) VALUES (0h)
GO TOP
DO WHILE !EOF()
   ? "# Varbinary characters: ", LEN(myVarbinaryField)
   ? 
   SKIP
ENDDO

Для получения более подробной информации о командных и функциях, использованных в этом примере, смотрите описания CLEAR Commands, CREATE CURSOR - SQL Command, INSERT - SQL Command, BROWSE Command, GO GOTO Command, DO WHILE ... ENDDO Command, EOF( ) Function и SKIP Command.

Expand imageСмотрите также