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-битовом длинном слове в 1-м - эквивалентно TIMESTAMP |
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^308 | IEEE двойной точности. 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) доступно только в 3-м диалекте |
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 секунды после полуночи. доступно только в 3-м диалекте |
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 * |
tipy_dannyx.txt · Последнее изменение: 2018/02/16 10:01 — german
Обсуждение
такие вещи как <тип данных> <array_dim> <dom_search_condition> встречаются также во многих местах, может имеет смысл их вынести на отдельную страницу ? во первых при изменении не надо будет править в 10 местах, во вторых по этойже причине проще отслеживать ошибки.
однозначно - да.
INT64 - не 10 в степени, а 2 в степени
А пример-то правильный ? Мне раньше казалось, что VARCHAR в отличие от CHAR «рубит» конечные пробелы в данных.
ну насколько я помню я проверял проверить не трудно
Небольшой вопросик, а чем отличается DECIMAL (precision, scale) от NUMERIC (precision, scale)? Названия разные, а записи в таблице одинаковые.
да вроде синонимы, лучше на форумах спрашивать.
FireBird сохраняет физическое число в типе данных Numeric с точностью 1-4 как SMALLINT и переполнение будет при 32768 или -32769. А DECIMAL хранит как INTEGER и переполнение будет при переходе выше максимального числа типа INTEGER. При точности 9-18 типы так же не совпадают.
В стандарте SQL-92 (глава 6.1) сказано, что тип DECIMAL имеет право хранить большее число знаков, чем указано в precision
Типа INT64 имхо нет, а есть BIGINT
Типа INT64 имхо нет, а есть BIGINT
При создании таблицы надо учитывать кодировку. Например, если кодировка UTF-8, то в скрипте для »(VAR)CHAR(n)» n может быть от 1 до 8191
Жаль что СПАМ тут никто не чистит.
На разных форумах встречал разную информацию по обязательному атрибуту SUBTYPE типа BLOB.
Хотелось бы уточнения по этому вопросу.
Например, такие объявления полей эквивалентны:
как всегда, поспешишь ……
Последние три записи суб_типа bibary
1