Длина | Назначение |
---|---|
32 | Заголовок файла DBF. См. табл 2. |
n*m | Дескрипторы полей в количестве n. Для dBASE 7 m=48 (см. табл 6), для предшествующих версий структуры заголовка m=32 (см. табл 5). |
1 | Терминальный байт CHR(13). |
Только в dBASE 7. Необязательные свойства полей. См. "Data File Header Structure for the dBASE Version 7 Table File". | |
m*k | Записи с данными (длиной k и количеством m). См. табл 8. |
Адрес | Длина | Назначение | |
---|---|---|---|
0 | 0x00 | 1 | Сигнатура. См. табл 3 и табл 4. |
1 | 0x01 | 3 | Дата последней модификации в виде ГГММДД |
4 | 0x04 | 4 | Число записей в базе |
8 | 0x08 | 2 | Полная длина заголовка (с дескрипторами полей) |
10 | 0x0A | 2 | Длина одной записи |
12 | 0x0C | 2 | Зарезервировано (всегда 0) |
14 | 0x0E | 1 | Флаг, указывающий на наличие незавершенной транзакции dBASE IV |
15 | 0x0F | 1 | Флаг шифрования таблицы dBASE IV |
16 | 0x10 | 12 | Зарезервированная область для многопользовательского использования |
28 | 0x1C | 1 | Флаг наличия индексного MDX-файла |
29 | 0x1D | 1 | Идентификатор кодовой страницы файла (dBASE IV, Visual FoxPro, XBase). См. табл 9. |
30 | 0x1E | 2 | Зарезервировано (всегда 0) |
32 | 0x20 | 32 | Только в dBASE 7. Идентификатор языкового драйвера. См. табл 10. |
64 | 0x40 | 4 | Только в dBASE 7. Зарезервировано |
Биты | Описание |
---|---|
0-2 | Номер версии: 3 для dBASE III, dBASE IV, dBASE V, 4 для dBASE 7. Прочие СУБД это правило соблюдают не всегда |
3 | В сочетании с битом 7 - флаг наличия MEMO-файла dBASE IV или dBASE for Windows |
4 | Зарезервировано для SQL-таблиц |
5-6 | Флаги dBASE IV SQL-таблицы |
7 | Наличие любого .DBT MEMO-файла (MEMO-файл таблицы dBASE III Plus, dBASE IV или dBASE под Windows) |
Сигнатура | СУБД | Описание | ||
---|---|---|---|---|
2 | 0x02 | FoxBASE | Таблица без memo-полей | |
3 | 0x03 | 00000011 | dBASE III, dBASE IV, dBASE 5, dBASE 7, FoxPro, FoxBASE+ | Таблица без memo-полей |
4 | 0x04 | 00000100 | dBASE 7 | Таблица без memo-полей |
48 | 0x30 | 00110000 | Visual FoxPro | Таблица (признак наличия memo-поля .FPT не предусмотрен ) |
49 | 0x31 | 00110001 | Visual FoxPro | Таблица с автоинкрементными полями |
67 | 0x43 | 01000011 | dBASE IV, dBASE 5 | SQL-таблица dBASE IV без memo-полей |
99 | 0x63 | 01100011 | dBASE IV, dBASE 5 | Системная SQL-таблица dBASE IV без memo-полей |
131 | 0x83 | 10000011 | dBASE III, FoxBASE+, FoxPro | Таблица с memo-полями .DBT |
139 | 0x8B | 10001011 | dBASE IV, dBASE 5 | Таблица с memo-полями .DBT формата dBASE IV |
140 | 0x8C | 10001100 | dBASE 7 | Таблица с memo-полями .DBT формата dBASE IV |
203 | 0xCB | 11001011 | dBASE IV, dBASE 5 | SQL-таблица dBASE IV с memo-полями .DBT |
203 | 0xE5 | 11100101 | SMT | Таблица с memo-полями .SMT |
235 | 0xEB | 11101011 | dBASE IV, dBASE 5 | Системная SQL-таблица dBASE IV с memo-полями .DBT |
245 | 0xF5 | 11110101 | FoxPro | Таблица с memo-полями .FPT |
251 | 0xFB | 11111011 | FoxBASE | Таблица с memo-полями .??? |
Табл. 5. Дескриптор поля (кроме dBASE 7).
Адрес | Длина | Назначение | |
---|---|---|---|
0 | 0x00 | 11 | Имя поля |
11 | 0x0B | 1 | Тип поля. См. табл 7 |
12 | 0x0C | 4 | Зарезервировано |
16 | 0x10 | 1 | Полная длина поля |
17 | 0x11 | 1 | Число десятичных разрядов; для типа C - второй байт длины поля |
30 | 0x1E | 13 | Зарезервировано (всегда 0) |
31 | 0x1F | 1 | Флаг тэга файла MDX (только в dBASE IV) |
Табл.6. Дескриптор поля в dBASE 7.
Адрес | Длина | Назначение | |
---|---|---|---|
0 | 0x00 | 32 | Имя поля |
32 | 0x20 | 1 | Тип поля. См. табл 7 |
33 | 0x21 | 1 | Полная длина поля |
34 | 0x22 | 1 | Число десятичных разрядов; для типа C - второй байт длины поля |
35 | 0x23 | 2 | Зарезервировано |
37 | 0x25 | 1 | Флаг тэга файла MDX: 1 для индексированного поля, 0 - для неиндексированного |
38 | 0x26 | 2 | Зарезервировано |
40 | 0x28 | 4 | Для автоинкрементного поля - следующее значение, для прочих полей - 0 |
44 | 0x2C | 4 | Зарезервировано |
Символ типа | Имя типа | Когда появился | Формат хранения |
---|---|---|---|
B | Binary | dBASE 5 | Номер блока в MEMO-файле, хранимый в виде строки до 10 цифр, выровненной вправо пробелами. Длина поля всегда 10. Пустое значение - 10 пробелов, означает отсутствие блока в MEMO-файле |
Double | MS Visual FoxPro | Плавающее число, хранимое в 8-байтовом бинарном формате IEEE 754. Пустое значение совпадает с нулем | |
C | Character | dBASE III | Строка, выровненная влево пробелами |
D | Date | dBASE III | Дата, хранимая в виде строки из 8 цифр в формате ГГГГММДД. Пустое значение - 10 пробелов |
F | Float | dBASE IV | Число, хранимое в виде строки заданной длины с заданным количеством цифр после точки, выровненной вправо пробелами. Пустое значение задается строкой пробелов. Чем отличается от Numeric, непонятно |
G | General (OLE) | dBASE 5 | Номер блока в MEMO-файле, хранимый в виде строки до 10 цифр, выровненной вправо пробелами. Длина поля всегда 10. Пустое значение - 10 пробелов, означает отсутствие блока в MEMO-файле |
I | Integer (Long) | dBASE 7 | Знаковое целое число, хранимое в бинарном виде. Длина поля - 4 байта, порядок байтов - big-endian, старший бит инвертирован относительно дополнительного кода. Преимущество такого формата хранения в том, что числа можно сравнивать побайтово, что очень полезно для индексирования. Пустое значение совпадает с нулем |
L | Logical | dBASE III | Булево значение, длина всегда 1. 'T', 't', 'Y', 'y' - истина, 'F', 'f', 'N', 'n' - ложь, пробел или '?' - пустое значение |
M | Memo | dBASE III | Номер блока в MEMO-файле, хранимый в виде строки до 10 цифр, выровненной вправо пробелами. Длина поля всегда 10. Пустое значение - 10 пробелов, означает отсутствие блока в MEMO-файле |
N | Numeric | dBASE III | Число, хранимое в виде строки заданной длины с заданным количеством цифр после точки, выровненной вправо пробелами. Пустое значение задается строкой пробелов |
O | Double | dBASE 7 | Плавающее число, хранимое в 8-байтовом бинарном формате, получаемом из IEEE 754 простым преобразованием. Порядок байтов изменяется на обратный, для отрицательных чисел инвертируются все биты, для неотрицательных - только знаковый бит. Преимущество такого формата хранения в том, что числа можно сравнивать побайтово, что очень полезно для индексирования. Пустое значение совпадает с нулем |
P | Picture | FoxPro | Номер блока в MEMO-файле, хранимый в виде строки до 10 цифр, выровненной вправо пробелами. Длина поля всегда 10. Пустое значение - 10 пробелов, означает отсутствие блока в MEMO-файле |
Q | Varbinary | MS Visual FoxPro | Бинарные данные переменной длины. Начальная часть хранится в DBF-файле, хвост переменного размера - в memo-файле |
T | DateTime | FoxPro | Дата и время. Существует в двух вариантах: текстовом и бинарном. Текстовый вариант - строка из 14 цифр в формате ГГГГММДДЧЧММСС; пустое значение - 14 пробелов. Бинарный вариант - два двойных слова little-endian, т.е. всего 8 байт; первое двойное слово содержит число дней от начала Юлианского календаря (01.01.4713 до нашей эры), второе двойное слово - число миллисекунд от начала суток; пустое значение - 8 нулевых байтов |
V | Varchar | MS Visual FoxPro | Строка переменной длины. Начальная часть строки хранится в DBF-файле, хвост переменного размера - в memo-файле. Индексация - только по начальной части |
W | Blob | MS Visual FoxPro | Нет информации о формате |
Y | Currency | MS Visual FoxPro | Денежный тип. Хранится в виде знакового 8-байтового целого числа little-endian. Точность хранения составляет 1E-4 денежной единицы. Пустое значение совпадает с нулем |
@ | Timestamp (DateTime) | dBASE 7 | Дата и время. Совпадает с типом 'T' в бинарном варианте |
+ | Autoincrement | dBASE 7 | Знаковое целое число, хранимое в бинарном виде. Длина поля - 4 байта, порядок байтов - big-endian, старший бит инвертирован относительно дополнительного кода. Преимущество такого формата хранения в том, что числа можно сравнивать побайтово, что очень полезно для индексирования. Пустое значение совпадает с нулем |
Длина | Назначение |
---|---|
1 | Заголовочный байт. Может
принимать одно из следующих значений:
|
n | Данные записи (количество данных n). Данные полей в порядке описания полей без разделителей. |
Табл. 9. Идентификаторы кодовой страницы
файла.
Идентификатор | Кодовая страница | Описание | |
---|---|---|---|
1 | 0x01 | 437 | US MS-DOS |
2 | 0x02 | 850 | International MS-DOS |
3 | 0x03 | 1252 | Windows ANSI Latin I |
4 | 0x04 | 10000 | Standard Macintosh |
8 | 0x08 | 865 | Danish OEM |
9 | 0x09 | 437 | Dutch OEM |
10 | 0x0A | 850 | Dutch OEM* |
11 | 0x0B | 437 | Finnish OEM |
13 | 0x0D | 437 | French OEM |
14 | 0x0E | 850 | French OEM* |
15 | 0x0F | 437 | German OEM |
16 | 0x10 | 850 | German OEM* |
17 | 0x11 | 437 | Italian OEM |
18 | 0x12 | 850 | Italian OEM* |
19 | 0x13 | 932 | Japanese Shift-JIS |
20 | 0x14 | 850 | Spanish OEM* |
21 | 0x15 | 437 | Swedish OEM |
22 | 0x16 | 850 | Swedish OEM* |
23 | 0x17 | 865 | Norwegian OEM |
24 | 0x18 | 437 | Spanish OEM |
25 | 0x19 | 437 | English OEM (Great Britain) |
26 | 0x1A | 850 | English OEM (Great Britain)* |
27 | 0x1B | 437 | English OEM (US) |
28 | 0x1C | 863 | French OEM (Canada) |
29 | 0x1D | 850 | French OEM* |
31 | 0x1F | 852 | Czech OEM |
34 | 0x22 | 852 | Hungarian OEM |
35 | 0x23 | 852 | Polish OEM |
36 | 0x24 | 860 | Portuguese OEM |
37 | 0x25 | 850 | Portuguese OEM* |
38 | 0x26 | 866 | Russian OEM |
55 | 0x37 | 850 | English OEM (US)* |
64 | 0x40 | 852 | Romanian OEM |
77 | 0x4D | 936 | Chinese GBK (PRC) |
78 | 0x4E | 949 | Korean (ANSI/OEM) |
79 | 0x4F | 950 | Chinese Big5 (Taiwan) |
80 | 0x50 | 874 | Thai (ANSI/OEM) |
87 | 0x57 | Current ANSI CP | ANSI |
88 | 0x58 | 1252 | Western European ANSI |
89 | 0x59 | 1252 | Spanish ANSI |
100 | 0x64 | 852 | Eastern European MS-DOS |
101 | 0x65 | 866 | Russian MS-DOS |
102 | 0x66 | 865 | Nordic MS-DOS |
103 | 0x67 | 861 | Icelandic MS-DOS |
104 | 0x68 | 895 | Kamenicky (Czech) MS-DOS |
105 | 0x69 | 620 | Mazovia (Polish) MS-DOS |
106 | 0x6A | 737 | Greek MS-DOS (437G) |
107 | 0x6B | 857 | Turkish MS-DOS |
108 | 0x6C | 863 | French-Canadian MS-DOS |
120 | 0x78 | 950 | Taiwan Big 5 |
121 | 0x79 | 949 | Hangul (Wansung) |
122 | 0x7A | 936 | PRC GBK |
123 | 0x7B | 932 | Japanese Shift-JIS |
124 | 0x7C | 874 | Thai Windows/MS–DOS |
134 | 0x86 | 737 | Greek OEM |
135 | 0x87 | 852 | Slovenian OEM |
136 | 0x88 | 857 | Turkish OEM |
150 | 0x96 | 10007 | Russian Macintosh |
151 | 0x97 | 10029 | Eastern European Macintosh |
152 | 0x98 | 10006 | Greek Macintosh |
200 | 0xC8 | 1250 | Eastern European Windows |
201 | 0xC9 | 1251 | Russian Windows |
202 | 0xCA | 1254 | Turkish Windows |
203 | 0xCB | 1253 | Greek Windows |
204 | 0xCC | 1257 | Baltic Windows |
Табл.10. Идентификаторы языковых
драйверов в dBASE 7.
Внутреннее имя | Полное имя | Набор символов |
---|---|---|
DBWINUS0 | 'ascii' ANSI | Windows code page 1252 |
DBWINES0 | 'Spanish' ANSI | Windows code page 1252 |
DBWINWE0 | 'WEurope' ANSI | Windows code page 1252 |
DB936CN0 | dBASE CHS cp936 | DOS code page 936 |
DB852CZ0 | dBASE CSY cp852 | DOS code page 852 |
DB867CZ0 | dBASE CSY cp867 | DOS code page 867 |
DB865DA0 | dBASE DAN cp865 | DOS code page 865 |
DB437DE0 | dBASE DEU cp437 | DOS code page 437 |
DB850DE0 | dBASE DEU cp850 | DOS code page 850 |
db437gr0 | dBASE ELL GR437 | DOS code page 439 |
DB437UK0 | dBASE ENG cp437 | DOS code page 437 |
DB850UK0 | dBASE ENG cp850 | DOS code page 850 |
DB437US0 | dBASE ENU cp437 | DOS code page 437 |
DB850US0 | dBASE ENU cp850 | DOS code page 850 |
DB437ES1 | dBASE ESP cp437 | DOS code page 437 |
DB850ES0 | dBASE ESP cp850 | DOS code page 850 |
DB437FI0 | dBASE FIN cp437 | DOS code page 437 |
DB437FR0 | dBASE FRA cp437 | DOS code page 437 |
DB850FR0 | dBASE FRA cp850 | DOS code page 850 |
DB850CF0 | dBASE FRC cp850 | DOS code page 850 |
DB863CF1 | dBASE FRC cp863 | DOS code page 863 |
db852hdc | dBASE HUN cp852 | DOS code page 852 |
DB437IT0 | dBASE ITA cp437 | DOS code page 437 |
DB850IT1 | dBASE ITA cp850 | DOS code page 850 |
DB932JP1 | dBASE JPN Dic932 | DOS code page 932 |
DB932JP0 | dBASE JPN cp932 | DOS code page 932 |
DB949KO0 | dBASE KOR cp949 | DOS code page 949 |
DB437NL0 | dBASE NLD cp437 | DOS code page 437 |
DB850NL0 | dBASE NLD cp850 | DOS code page 850 |
DB865NO0 | dBASE NOR cp865 | DOS code page 865 |
db852po0 | dBASE PLK cp852 | DOS code page 852 |
DB850PT0 | dBASE PTB cp850 | DOS code page 850 |
DB860PT0 | dBASE PTG cp860 | DOS code page 860 |
db866ru0 | dBASE RUS cp866 | DOS code page 866 |
db852sl0 | dBASE SLO cp852 | DOS code page 852 |
DB437SV0 | dBASE SVE cp437 | DOS code page 437 |
DB850SV1 | dBASE SVE cp850 | DOS code page 850 |
DB950TW0 | dBASE CHT cp950 | DOS code page 950 |
db874th0 | dBASE THA cp874 | DOS code page 874 |
DB857TR0 | dBASE TRK cp857 | DOS code page 857 |
dbHebrew | Hebrew dBASE | DOS code page 862 |
Bgdb868 | DBASE BUL 868 | DOS code page 868 |