Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
VisualFoxPro.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
10.6 Mб
Скачать

3.7.8. Тип данных Varbinary

Хранит символьные данные в виде двоичных литералов без нулевых байтов, дополняющих значение до длины поля. Длина поля в случае типа 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( ).

3.7.9. Типы данных Varchar и Varchar (Binary)

Поле типа данных Varchar содержит произвольный текст без пробелов, дополняющих его до длины поля. Так, если в полях Vcharfld и Charfld длиной 10 символов соответственно типов Varchar и Character поместить строку "abc", то LEN(Vcharfld) и LEN(Charfld) вернут соответственно 3 и 10. Тип Varchar также полезен для взаимодействия с данными типа Varchar SQL Server. Тип Varchar (Binary) отличается от Varchar отсутствием связи с кодовой страницей.

Переменная, получив значение типа Varchar или Varchar (Binary), будет иметь тип Character, например:

cVar = Test.Vcharfld && Vcharfld – поле типа Varchar таблицы Test

? VarType(cVar) && Напечатает: C

Программно поле Varchar (Binary) создается командами CREATE TABLE и CREATE CURSOR, если использована опция NOCPTRANS.

Поля типа Varchar и Varchar (Binary) имеют приоритет над полями типа Character и Character (Binary) в опции UNION или при выполнении конкатенации. Так, если один операнд имеет тип Varchar, а другой – тип Character, то результирующее поле будет иметь тип Varchar.

Пример. Результирующее поле Newfld будет иметь тип Varchar. Длина результата будет равна сумме LEN(Vcharfld) + LEN(Charfld).

select Vcharfld + Charfld as Newfld from Test

То же справедливо и для символьных функций VFP, возвращающих символьный результат: поле будет иметь тип Varchar, если операнд имеет тип Varchar или Varchar (Binary), например результате запроса

select Substr(Vcharfld, 2) as Newfld from Test

поле Newfld будет иметь тип Varchar.

Индексные ключи, построенные на основе полей типа Varchar и Varchar (Binary) или выражений с полями таких типов, дополняются хвостовыми пробелами до длины наибольшего ключа. Поэтому SQL-опция LIKE с в условиях объединения или фильтрации только частично рашмор-оптимизируема.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]