Инструменты пользователя

Инструменты сайта


Боковая панель

Введение

Статьи и часто задаваемые вопросы

Установка и настройка

Обработка ошибок

Полезные запросы SQL

Тематические группы

tipy_dannyx

Типы данных

Типы данных SQL-сервера Firebird используются при создании доменов, таблиц, просмотров, хранимых процедур, объявления контекстных переменных и параметров в PSQL-блоках/хранимых процедурах/триггерах.

Таблица типов данных

Имя Размер Точность Описание
BLOB Переменный Нет. Размер сегмента BLOB ограничивается 64К. Тип данных с динамически изменяемым размером для хранения больших данных, таких как графика, тексты, оцифрованные звуки. Базовая структурная единица — сегмент. Подтип Blob описывает содержимое.
CHAR(n) n/кол-во_байт_на_символ, т.е. зависит от кодировки от 1 до 32 767 байтов. Набор символов определяет размер символов в байтах и задает количество символов, которое может быть меньше 32К CHAR фиксированной длины или строка текста. В случае если строка меньше заявленой - она добивается пробелами с конца до заданной длины1)
CHARACTER(n) –\\– –\\– –\\–
VARCHAR(n) –\\– от 1 до 32 765 байтов. Набор символов определяет размер символов в байтах и задает количество символов, которое может быть меньше 32К CHAR переменной длины или строка текста. Конечные пробелы сохраняются, но обрезаются те, что не вмещаются в обьявленую длину2)
CHAR VARYING (n) –\\– –\\– –\\–
CHARACTER VARYING (n) –\\– –\\– –\\–
DATE 32 бита 1 января 0001 г. – 31 декабря 9999 г.Сохраняет дату в 32-битовом длинном слове
DECIMAL (precision, scale) Переменный (16, 32 или 64 бита) precision = от 1 до 18; указывает, по меньшей мере, precision количество цифр для хранения. scale = от 0 до 18. Задает количество знаков после точки. Должно быть меньше или равно precisionЧисло с десятичной точкой, имеющей после точки scale разрядов. Пример: DECIMAL(10,3) содержит число точно в следующем формате: ppppppp.sss
DOUBLE PRECISION 64 бита от 2.225 x 10^–308 до 1.797 x 10^308IEEE двойной точности. 15 цифр.
FLOAT 32 бита от 1.175 x 10^–38 до 3.402 x 10^38 IEEE одинарной точности. 7 цифр.
INT64 64 бита от –2^63 до (2^63)-1 аналогично NUMERIC(18,0)
INTEGER 32 бита от –2,147,483,648 до 2,147,483,647 Знаковое длинное (двойное слово).
NCHAR(n)n символовот 1 до 32 767 байтов. Тоже самое что CHAR(n), за исключением того что NCHAR использует кодировку ISO8859_1 по умолчанию.
NATIONAL CHAR(n) –\\– –\\– –\\–
NATIONAL CHARACTER(n) –\\– –\\– –\\–
NUMERIC (precision, scale) Переменный (16, 32 или 64 бита) precision = от 1 до 18; точное количество цифр для хранения. scale = от 0 до 18; задает количество знаков после точки. Должно быть меньше или равно precision. Число с десятичной точкой, имеющей после точки scale разрядов. Пример: NUMERIC(10,3) содержит число точно в следующем формате: ppppppp.sss
SMALLINT 16 бит от –32768 до 32767 Знаковое короткое (слово).
TIME 32 бита от 0:00:00.000 до 23:59:59.9999 Беззнаковое целое типа InterBase ISC_TIME. Время дня в единицах 0.0001 секунды после полуночи.
TIMESTAMP 64 бита 1 января 0001 г. 0:00:00.0000 – 31 декабря 9999 г. 23:59:59.9999 Тип InterBase ISC_TIMESTAMP. Комбинация информации DATE и TIME.

примеры по char и varchar

CREATE TABLE NEW_TABLE (
    VCH  VARCHAR(10),
    CH   CHAR(10)
);
INSERT INTO NEW_TABLE (VCH, CH) VALUES ('   000   ', '   000   ');
INSERT INTO NEW_TABLE (VCH, CH) VALUES ('111   ', '111   ');
INSERT INTO NEW_TABLE (VCH, CH) VALUES ('222', '222');
INSERT INTO NEW_TABLE (VCH, CH) VALUES ('   333', '   333');
INSERT INTO NEW_TABLE (VCH, CH) VALUES ('444          ', '444          ');/*10 пробелов*/
SELECT '*'||ch||'*' ch, '*'||vch||'*' vch  FROM new_table

результат

CH VCH
*   000    *
*   000   *
*111       *
*111   *
*222       *
*222*
*   333    *
*   333*
*444       *
*444       *
1) , 2) пример ниже

Обсуждение

Attid, 2008/02/11 18:14

такие вещи как <тип данных> <array_dim> <dom_search_condition> встречаются также во многих местах, может имеет смысл их вынести на отдельную страницу ? во первых при изменении не надо будет править в 10 местах, во вторых по этойже причине проще отслеживать ошибки.

kdv@ibase.ru, 2008/05/27 09:33

однозначно - да.

Slava Ekimov, 2008/02/13 11:23

INT64 - не 10 в степени, а 2 в степени

PEAKTOP, 2008/04/27 03:52

А пример-то правильный ? Мне раньше казалось, что VARCHAR в отличие от CHAR «рубит» конечные пробелы в данных.

Attid, 2008/05/27 14:50

ну насколько я помню я проверял =) проверить не трудно =)

Alexandr, 2008/09/08 10:44

Небольшой вопросик, а чем отличается DECIMAL (precision, scale) от NUMERIC (precision, scale)? Названия разные, а записи в таблице одинаковые.

Attid, 2008/09/08 12:17

да вроде синонимы, лучше на форумах спрашивать.

Alexandr, 2008/09/10 21:10

FireBird сохраняет физическое число в типе данных Numeric с точностью 1-4 как SMALLINT и переполнение будет при 32768 или -32769. А DECIMAL хранит как INTEGER и переполнение будет при переходе выше максимального числа типа INTEGER. При точности 9-18 типы так же не совпадают.

Герман, 2008/09/12 13:39

В стандарте SQL-92 (глава 6.1) сказано, что тип DECIMAL имеет право хранить большее число знаков, чем указано в precision

Sergey, 2011/02/08 18:54

Типа INT64 имхо нет, а есть BIGINT

Sergey, 2011/02/08 20:01

Типа INT64 имхо нет, а есть BIGINT

toxicdream, 2011/11/01 00:55

При создании таблицы надо учитывать кодировку. Например, если кодировка UTF-8, то в скрипте для »(VAR)CHAR(n)» n может быть от 1 до 8191

gardener, 2013/08/01 20:23

Жаль что СПАМ тут никто не чистит.

На разных форумах встречал разную информацию по обязательному атрибуту SUBTYPE типа BLOB.

Хотелось бы уточнения по этому вопросу.

Например, такие объявления полей эквивалентны:

  TEXT_BLOB_TYPE BLOB sub_type text
  TEXT_BLOB_TYPE BLOB sub_type 1
  TEXT_BLOB_TYPE BLOB sub_type -2
  TEXT_BLOB_TYPE BLOB sub_type binary
  TEXT_BLOB_TYPE BLOB sub_type 0
  TEXT_BLOB_TYPE BLOB sub_type -1
gardener, 2013/08/01 20:25

как всегда, поспешишь ……

Последние три записи суб_типа bibary

Только авторизованные участники могут оставлять комментарии.
tipy_dannyx.txt · Последние изменения: 2013/03/23 12:51 (внешнее изменение)