Распечатать страницу

Тип данных VARBINARY в Visual FoxPro

« Назад

Хранит символьные данные в виде двоичных литералов без нулевых байтов, дополняющих значение до длины поля. Длина поля в случае типа Varbinary фиксирована. Если есть необходимость хранить двоичные данные переменной длины, то используется тип Blob.

Двоичным литералам предшествует префикс 0h. Далее следуют шестнадцатеричные величины, например: 0h202020, 0h6ABCDEF или 0h (пустой двоичный литерал).

Переменная получит тип Varbinary, если ей присвоить значение двоичного литерала, например:

someVarbinary = 0h616263              && Строка "abc"

? VarType(someVarbinary)               && Напечатает: Q

? Cast(someVarbinary as C(Len(someVarbinary)))     && Напечатает: abc

? "" + someVarbinary                        && Напечатает: abc

С данными типа Varbinary (Q) употребляются операции отношения и конкатенации. При этом в выражении могут присутствовать также и данные типов Varchar (V) и Character (C). Тип результата операции конкатенации определяется типом первого операнда, например:

V + Q = V

Q + V = Q

C + V = Q

В операциях отношения с типами Varbinary, Varchar и Character управляет операцией левый операнд, например, сравнение

Q = V

VFP выполняет по байтам, преобразовывая тип Varchar в тип Varbinary, то есть выполняя сравнение

Cast(V as Q(n)) = Q            && n = Len(Q)

При сравнении

V = Q

VFP оценивает величины как символьные строки, что равносильно сравнению

Cast(Q as V(n)) = V

Индексные ключи, основанные на полях или выражениях типа Varbinary, содержат нулевые байты, дополняющие значение до длины ключа, например величины 0hAA, 0hAA00 и 0hAA000 имеют одно и то же значение индексного ключа – 0hAA0000. Для ключей, основанных на двоичных данных, применяется collate-последовательность MACHINE. Иная collate-последовательность недопустима.

Тип Varbinary поддерживается для таблиц баз данных, свободных таблиц, курсоров и видов. Преобразование кодовой страницы не выполняется.

С типом Varbinary употребляются символьные функции, кроме LIKE( ), LIKEC( ) и CTOBIN( ), и битовые функции, кроме BITLSHIFT( ) и BITRSHIFT( ). Кроме того, Varbinary не поддерживается и опцией LIKE команды SELECT – SQL.

Пример. Таблица Text имеет поле Vbinfld типа Varbinary поле Charfld типа Character. Длина каждого поля 10 байтов.

select Test

replace Vbinfld with 'abc' ;

Charfld with 'abc'

? Vbinfld                             && Напечатает: 0h616263

? Charfld                             && Напечатает: abc

? Len(Vbinfld)                     && Напечатает: 3

? Len(Charfld)                     && Напечатает: 10

? At('b', Vbinfld)                 && Напечатает: 2

? At(0h62, Vbinfld)            && Напечатает: 2

Замечания:

1. Функции ALLTRIM( ), LTRIM( ), RTRIM( ) и TRIM( ) удаляют ведущие и хвостовые нулевые байты двоичной величины.

2. Величины типа Varbinary не совместимы с двоичными результатами, возвращаемыми функцией BINTOC( ) и принимаемыми функцией CTOBIN( ).