Spec-Zone.ru › MariaDB

Тип таблицы BIN

Обзор

Таблица типа BIN физически представляет собой двоичный файл, в котором каждая строка — это логический записной блок фиксированной длины[1]. В пределах записи поля столбцов имеют фиксированный смещение и длину, как и в таблицах FIX. Особенностью таблиц BIN является то, что числовые значения кодируются в представлении, используемом нативной платформе, поэтому для обработки числовых значений в выражениях не требуется преобразование.

Не требуется, чтобы строки файла BIN отделялись символами, такими как CR и/или LF, но это возможно. В таком случае необходимо соответствующим образом указать опцию lrecl.

Примечание: В отличие от таблиц типов DOS и FIX, ширина полей соответствует длине их внутреннего представления в файле. Например, для столбца, объявленного как:

number int(5) not null,

Ширина поля в файле составляет 4 символа, размер двоичного целого числа. Это значение используется для расчета смещения следующего поля, если оно не указано. Поэтому, если следующее поле расположено на 5 символов после этого, этого объявления недостаточно, и для следующего поля необходимо будет использовать опцию флага.

Преобразование типов в таблицах BIN

Вот соответствия между типом столбца и форматом поля по умолчанию:

Тип столбца Формат файла по умолчанию
Char(n) Текст из n символов.
Дата Целое число (4 байта)
Int(n) Целое число (4 байта)
Smallint(n) Короткие целые числа (2 байта)
TinyInt(n) Символ (1 байт)
Bigint(n) Большие целые числа (8 байт)
Double(n,d) Двойная плавающая точка (8 байт)

Однако тип столбца необязательно должен совпадать с форматом поля внутри файла таблицы. В частности, это происходит для форматов полей, соответствующих числовым типам, которые не обрабатываются CONNECT[2]. Действительно, файлы таблиц BIN могут содержать числа с плавающей точкой или двоичные числа любой длины в представлении big-endian или little-endian[3]. Кроме того, как и в таблицах типа DOS или FIX, вы можете обработать некоторые символьные поля как числовые или наоборот.

Поэтому можно указать формат поля, когда он не соответствует типу столбца по умолчанию, используя опцию столбца field_format в операторе CREATE TABLE. Вот доступные форматы полей для таблиц BIN:

Field_format Внутреннее представление
[n]{L или B или H}[n] Двоичное число из n байтов в представлении little-endian, big-endian или host-endian.
C Строка символов (n байт)
I Целое число (4 байта)
D Двойная плавающая точка (8 байт)
S Короткие целые числа (2 байта)
T Маленькие целые числа (1 байт)
G Большие целые числа (8 байт)
F или R Вещественное или с плавающей точкой (число с плавающей точкой 4 байта)
X Использовать формат поля по умолчанию для типа столбца

Все форматы полей (кроме первого) представляют собой односимвольное указание[4]. 'X' эквивалентно отсутствию указания формата поля. Для указания символа 'C' n — это ширина столбца, как указано в типе столбца. Для одностолбцовых форматов количество байтов числовых полей соответствует количеству байтов на большинстве платформ. Однако оно может меняться для некоторых. Форматы G, I, S и T устарели, так как соответствуют поддерживаемым типам данных и могут не поддерживаться в будущих версиях.

Пример

Вот пример таблицы BIN. Предполагается, что структура записи файла:

NNNNCCCCCCCCCCIIIISSFFFFSS

Здесь N обозначает числовые символы, C — любые символы, I — целые байты, S — короткие целые байты, а F — байты с плавающей точкой. Поле IIII содержит дату в числовом формате.

Таблица может быть создана с помощью:

create table testbal (
fig int(4) not null field_format='C',
name char(10) not null,
birth date not null field_format='L',
id char(5) not null field_format='L2',
salary double(9,2) not null default 0.00 field_format='F',
dept int(4) not null field_format='L2')
engine=CONNECT table_type=BIN block_size=5 file_name='Testbal.dat';

Указание представления little-endian для двоичных значений нецелесообразно на большинстве машин, но делает оператор create table переносимым на машину, использующую big-endian, а также на файл таблицы.

Смещения полей и длина записи файла рассчитываются в соответствии с внутренним форматом столбца и, при необходимости, изменяются форматом поля. Для сжатого двоичного файла без символов конца строки указывать их необязательно. Если требуется символ конца строки, укажите опцию окончания или укажите опцию lrecl , добавив ширину окончания. Таблица может быть заполнена:

insert into testbal values
  (5500,'ARCHIBALD','1980-01-25','3789',4380.50,318),
  (123,'OLIVER','1953-08-10','23456',3400.68,2158),
  (3123,'FOO','2002-07-23','888',default,318);

Обратите внимание, что типы вставляемых значений должны соответствовать типу столбца, а не типу формата поля.

Запрос:

select * from testbal;

возвращает:

fig name birth id salary dept
5500 ARCHIBALD 1980-01-25 3789 4380.50 318
123 OLIVER 1953-08-10 23456 3400.68 2158
3123 FOO 2002-07-23 888 0.00 318

Выравнивание числовых полей

В двоичных файлах числовые поля и длина записи могут быть выровнены на границах 4 или 8 байт для повышения производительности на определенных процессорах. Это можно изменить в OPTION_LIST с помощью опции «align» («packed», что означает align=1 является значением по умолчанию).


  1. ↑ Иногда это может быть физическая запись, если в файл были записаны LF или CRLF.
  2. ↑ Большинство из них устарели, так как CONNECT поддерживает все типы столбцов, кроме float.
  3. ↑ Представление по умолчанию, используемое в файле таблицы, может быть указано путем установки опции ENDIAN как ‘L’ или ‘B’ в списке опций.
  4. ↑ Оно может быть указано более чем одним символом, но только первый из них имеет значение.
Содержимое, воспроизводимое на этом сайте, является собственностью соответствующих владельцев, и это содержимое не проверяется предварительно компанией MariaDB. Мнения, информация и мнения, выраженные в этом содержимом, не обязательно отражают точку зрения MariaDB или любой другой стороны.

© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/connect-bin-table-type/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API