Доброго времени суток!

Решил проверить FB (2.1.0.16235, 1.5.4) на граничных значениях.
Размер строки таблицы - 64 Кб, размер входного и выходного буфера - вроде бы тоже 64 Кб

Хорошо, попробуем выйти за эти пределы

create table table12
(value2 VARCHAR(32763),
 value1 VARCHAR(32765)
)

возвращает
unsuccessful metadata update.
new record size of 65537 bytes is too big.
TABLE TABLE12.

32763 + 32765 + 2 + 2 (длина поля VARCHAR) = 65532

Что же хранится в остальных 5? RDB$DB_KEY - так вроде он 8 байт.

create table table12
(value2 VARCHAR(32762),
 value1 VARCHAR(32765)
)

создать удается.

Переставим в объявлении столбцы местами:

create table table13
( value1 VARCHAR(32765),
  value2 VARCHAR(32762)
 )

unsuccessful metadata update.
new record size of 65536 bytes is too big.
TABLE TABLE13.

Методом проб удалось создать
create table table13
(value1 VARCHAR(32765),
 value2 VARCHAR(32761))

Интересно, правда?

Пытаемся выбрать данные из пустой таблицы

select * from table13 или
select value1,value2 from table13

Получаем ошибку
Dynamic SQL Error.
SQL error code = -204.
Implementation limit exceeded.
block size exceeds implementation restriction.

Методом проб удается выяснить максимальную длину строк в запросе
select CAST(value1 AS VARCHAR(32765)),
       CAST(value2 AS VARCHAR(32748)) from table13

и

select CAST(value2 AS VARCHAR(32747)),
CAST(value1 AS VARCHAR(32765)) from table13

Обратите внимание: при перестановке полей длина буфера снова изменяется.

Также непонятно, почему выходной буфер меньше, чем реально хранимые данные.

С уважением, Евгений.

Ответить