====== Типы данных ======
Типы данных 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 *|