Тип таблицы DBF CONNECT
Обзор
Таблица типа DBF физически представляет собой файл формата dBASE III или IV (используется многими продуктами, такими как dBASE, Xbase, FoxPro и т. д.). Этот формат похож на формат типа FIX с добавлением префикса, определяющего характеристики файла, в частности, описывающего все поля (столбцы) таблицы.
Поскольку файлы DBF имеют заголовок, содержащий метаданные о файле, в частности, описание столбцов, можно создать таблицу на основе существующего файла DBF без указания описания столбцов, например:
create table cust engine=CONNECT table_type=DBF file_name='cust.dbf';
Чтобы увидеть, что сделало CONNECT, можно использовать команды DESCRIBE или SHOW CREATE TABLE, а затем изменить некоторые параметры с помощью команды ALTER TABLE.
Случай удалённых строк обрабатывается для таблиц DBF особым образом. Удалённые строки не удаляются из файла, а «мягко удаляются», то есть помечаются как удалённые. В частности, количество строк, содержащихся в заголовке файла, не учитывает мягко удалённые строки. Вот почему, если выполнить эти две команды, применённые к таблице DBF с именем tabdbf:
select count(*) from tabdbf; select count(*) from tabdbf where 1;
Они могут дать разный результат, при этом первая (быстрая) команда даст количество физических строк в файле, а вторая — количество строк, которые не являются (мягко) удалёнными.
Команды UPDATE, INSERT и DELETE можно использовать с таблицами DBF. Команда DELETE помечает удалённые строки как удалённые, но сохраняет их в файле. Команда INSERT, если она используется для заполнения вновь созданной таблицы, строит заголовок файла перед вставкой новых строк.
Примечание: для таблиц DBF длина имени столбца ограничена 11 символами, а длина поля — 256 байтами.
Преобразование типов данных dBASE
CONNECT обрабатывает только типы, которые хранятся как символы.
| Символ | Тип DBF | Тип CONNECT | Описание |
|---|---|---|---|
| B | Двоичный (строковый) | TYPE_STRING | 10 цифр, представляющие номер блока .DBT. |
| C | Символьный | TYPE_STRING | Все символы кодовой страницы OEM — заполняются пробелами до ширины поля. |
| D | Дата | TYPE_DATE | 8 байт — дата хранится как строка в формате ГГГГММДД. |
| N | Числовой | TYPE_INT TYPE_BIGINT TYPE_DOUBLE | Число хранится как строка, выровнено по правому краю и дополнено пробелами до ширины поля. |
| L | Логический | TYPE_STRING | 1 байт — инициализирован до 0x20, в противном случае T или F. |
| M | Мемо (строковый) | TYPE_STRING | 10 цифр, представляющие номер блока .DBT. |
| @ | Отметка времени | Не поддерживается | 8 байт — два целых числа, первое для даты, второе для времени. Это число дней с 01.01.4713 до н. э. |
| I | Длинный | Не поддерживается | 4 байта. Самый левый бит используется для указания знака, 0 отрицательный. |
| + | Автоинкремент | Не поддерживается | То же, что и Длинный |
| F | Вещественный | TYPE_DOUBLE | Число хранится как строка, выровнено по правому краю и дополнено пробелами до ширины поля. |
| O | Двойной | Не поддерживается | 8 байт — преобразования не производятся, хранится как double. |
| G | OLE | TYPE_STRING | 10 цифр, представляющие номер блока .DBT. |
Для числового типа N CONNECT преобразует его в TYPE_DOUBLE, если значение десятичных знаков не равно 0, в TYPE_BIGINT, если значение длины больше 10, в противном случае в TYPE_INT.
Для типов M, B и G CONNECT просто возвращает номер DBT.
Чтение мягко удалённых строк таблицы DBF
Эти строки можно читать, изменив режим чтения таблицы. Это определяется параметром READMODE, который может принимать значения:
| 0 | Стандартный режим. Это значение по умолчанию. |
| 1 | Чтение всех строк, включая мягко удалённые. |
| 2 | Чтение только мягко удалённых строк. |
Например, чтобы прочитать все строки таблицы tabdbf, можно сделать следующее:
alter table tabdbf option_list='Readmode=1';
Чтобы вернуться к обычному режиму, укажите READMODE=0.
© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/connect-dbf-table-type/