====== Типы данных ====== Типы данных SQL-сервера Firebird используются при создании доменов, таблиц, просмотров, хранимых процедур, объявления контекстных переменных и параметров в PSQL-блоках/хранимых процедурах/триггерах. ===== Таблица типов данных ===== ^Имя ^Размер ^Точность ^Описание^ | BLOB |Переменный |Нет. Размер сегмента BLOB ограничивается 64К. |Тип данных с динамически изменяемым размером для хранения больших данных, таких как графика, тексты, оцифрованные звуки. Базовая структурная единица — сегмент. Подтип Blob описывает содержимое.| |CHAR(n) | n/кол-во_байт_на_символ, т.е. зависит от кодировки |от 1 до 32 767 байтов.| Набор символов определяет размер символов в байтах и задает количество символов, которое может быть меньше 32К CHAR фиксированной длины или строка текста. В случае если строка меньше заявленой - она добивается пробелами с конца до заданной длины((пример ниже))| |CHARACTER(n)| --\\-- | --\\-- | --\\-- | |VARCHAR(n) | --\\-- |от 1 до 32 765 байтов.| Набор символов определяет размер символов в байтах и задает количество символов, которое может быть меньше 32К CHAR переменной длины или строка текста. Конечные пробелы сохраняются, но обрезаются те, что не вмещаются в обьявленую длину((пример ниже))| |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 *|