Документация FirebirdДокументация по FirebirdПереход с MS SQL на Firebird → Типы данных
Firebird home Firebird home Пред.: АдминистрированиеНачало: Документация FirebirdУровень выше: Переход с MS SQL на FirebirdСлед.: Синтакс SQL

Типы данных

Перенос типа данных bit
Перенос типа данных identity (идентификатор)
Перенос типа данных uniqueidentifier (глобально уникальный идентификатор)

Этот раздел описывает различные типы данных, доступные в СУБД Firebird и MS SQL, а также соответствия типов для перехода с одной системы на другую.

Доступные типы данных СУБД MS SQL зависят от версии СУБД. В следующей таблице перечислены типы данных и версия СУБД, в которой они были введены.

Таблица 1. Таблица соответствия типов данных

Вер. MSSQL

Тип данных

Тип Firebird

Определение MSSQL и пояснения

6.5

bigint

INT64

8-байтные целочисленные данные.

6.5

binary

CHAR

Двоичные данные фиксированной длины. Максимальная длина 8000 байт. В версии 6.5 максимальная длина была 255 байт.

6.5

bit

CHAR(1)

Целочисленные данные со значениями только 1 или 0. Обычно заменяются константами 'T' и 'F'. (В СУБД Firebird так же можно использовать тип SMALLINT со значениями 0 и 1. - прим. перев.)

6.5

char

CHAR

Текстовые данные фиксированной длины (не-Unicode). Максимальная длина 8000 символов. В версии 6.5 максимальная длина была 255 байт. СУБД Firebird способна хранить до 32767 символов.

6.5

cursor

Ссылка на курсор. Этот тип используется только в хранимых процедурах и триггерах; этот тип не может использоваться при объявлении структуры таблиц.

6.5

datetime

TIMESTAMP

Дата и время с 1 января 1753 года до 31 декабря 9999 года, точность 3/100 секунды (3.33 мс).

6.5

decimal

DECIMAL

Числовые данные с фиксированной точностью. Диапазон от -1038-1 до 1038-1.

6.5

float

FLOAT

Вещественные числовые данные. Диапазон от -1.79E+38 до 1.79E+38.

6.5

image

BLOB

Двоичные данные переменной длины. Максимальная длина 231-1 (2147483647) байт.

6.5

int

INTEGER

4-байтные целочисленные данные. Диапазон от -231 (-2147483648) до 231-1 (2147483647).

6.5

money

DECIMAL(18,4)

Денежные данные. Диапазон от -263 (-922337203685477.5808) до 263-1 (+922337203685477.5807), точность до 1/10000 денежной единицы.

7

nchar

CHAR(x) CHARACTER SET UNICODE_FSS

Символные данные фиксированной длины (Unicode). Максимальная длина 4000 символов.

7

ntext

BLOB SUB_TYPE TEXT

Символьные данные переменной длины (Unicode). Максимальная длина 230-1 (1073741823) символов.

6.5

numeric

NUMERIC

В СУБД MS SQL decimal и numeric эквивалентны.

7

nvarchar

VARCHAR(x) CHARACTER SET UNICODE_FSS

Символьные данные переменной длины. Максимальная длина 4000 символов.

6.5

real

DOUBLE PRECISION

Вещественные данные. Диапазон от -3.40E+308 до 3.40E+308.

6.5

smalldatetime

TIMESTAMP

Дата и время с 1 января 1900 года до 6 июня 2079 года, точность 1 минута. Тип данных Firebird имеет бОльшие диапазон и точность.

6.5

smallint

SMALLINT

2-байтные целочисленные данные. Диапазон от -215 (-32768) до 215-1 (32767).

6.5

smallmoney

DECIMAL(10,4)

Денежные данные. Диапазон от -214748.3648 до +214748.3647, точность 1/10000 денежной единицы. Диапазон СУБД Firebird больше при указанной замене.

2000

sql_variant

BLOB

Данные различных типов.

2000

table

нет эквивалента

Промежуточные результаты выполнения запроса для последующего использования.

6.5

text

BLOB SUB_TYPE TEXT

Символьные данные переменной длины (не-Unicode). Максимальная длина 231-1 (2147483647) символов.

6.5

timestamp

INTEGER или BIGINT

Уникальное для базы данных число. В СУБД Firebird Вам необходимо использовать механизм генераторов для этих целей.

6.5

tinyint

SMALLINT

1-байтовое целочисленное значение без знака. Диапазон от 0 до 255. В СУБД Firebird нет эквивалентного типа.

6.5

varbinary

VARCHAR

Двоичные данные переменной длины. Максимальная длина 8000 байт.

6.5

varchar

VARCHAR

Символьные данные переменной длины (не-Unicode). Максимальная длина 8000 символов. СУБД Firebird способна хранить до 32765 символов. В СУБД MS SQL 6.5 максимум был 255 символов.

7

uniqueidentifier

CHAR(36)

Глобально уникальный идентификатор (GUID). В СУБД Firebird Вам неоходимо использовать функции, определяемые пользователем (UDF), для генерации значения идентификатора. (Если Вы собираетесь индексировать поле с глобально уникальными идентификаторами, то лучше использовать UUID - это другой формат представления GUID, представляемый как CHAR(22). - прим. перев.)

Небольшое различие в поведении в СУБД Firebird между типами NUMERIC и DECIMAL, которое приходит на ум, заключается в том, что определение NUMERIC означает четко указанную точность (общее число цифр), в то время как DECIMAL одначает как минимум указанную точность. В СУБД MS SQL оба типа numeric и decimal эквивалентны.

Существует также квази-тип данных - identity (идентификатор), который может использоваться только для указания в определениях таблиц. Фактически, это тип данных int, значение поля автоматически генерируется при добавлении новой записи и не может быть впоследствии изменено.

Перенос типа данных bit

Тип данных bit используется для хранения булевого (логического) значения, 0 или 1. СУБД MS SQL не поддерживает присваивание значения NULL таким полям. Пользователи СУБД Firebird могут эмулировать поведение логического типа, используя типы SMALLINT или CHAR(1).

Возможные значения полей логического типа в СУБД Firebird могут быть ограничены через использование доменов (domains).

Перенос типа данных identity (идентификатор)

Существует несколько способов переноса механизма идентификаторов СУБД MS SQL. В общем, СУБД Firebird имеет бОльшую гибкость и мощь в этом вопросе.

Самый простой способ создаия аналога типа identity - создание триггера BEFORE INSERT (перед вставкой новой записи в базу данных) для интересующей Вас таблицы, и в этом триггере присваивать очередное значение генератора. Такой метод гарантирует уникальность (при условии, что шаг для генератора отличен от нуля и всегда имеет один и то же знак - прим. перев.).

Для дополнительной гибкости, можно использовать один генератор для всех таблиц. В этом случае получится аналог типа timestamp - уникального для всей базы данных идентификатора.

Еще одна обычная техника - создание хранимой процедуры, которая возвращает очередное значение генератора. Это так же позволяет получать значение генератора и использовать его для нескольких операций (например, при добавлении записи в основную таблицу, а затем добавлении нескольких записей в подчиненную таблицу).

CREATE TABLE my_table (
  my_number integer not null primary key
) 
CREATE GENERATOR my_generator
CREATE TRIGGER my_before_trigger FOR my_table
BEFORE INSERT
AS
BEGIN
  IF (NEW.my_number IS NULL)
    THEN NEW.my_number = GEN_ID(my_generator, 1);
END 
CREATE PROCEDURE get_my_generator
RETURNS (new_value INTEGER)
AS
BEGIN
  new_value = GEN_ID(my_generator, 1);
END 

Перенос типа данных uniqueidentifier (глобально уникальный идентификатор)

В СУБД MS SQL тип uniqueidentifier используется для репликации. Также это простой способ определения уникальных глобальных идентификаторов для записей базы данных.

Для использования аналогичного типа данных в СУБД Firebird создайте триггер BEFORE INSERT (перед вставкой новой записи) для интересующей Вас таблицы с полем типа uniqueidentifier, и используйте значение функции, определяемой пользователем (UDF), для получения очередного значения GUID.

Вы можете использовать библиотеку uuidUDF (прим. перев.):

/**************************************************************
UUID_CREATE
Returns a UUID (cstring(22), compressed, reversed,
  URL compatible UUID)
Parameters: cstring(22)	dummy to allow Interbase to perform
  memory management
Returns:    cstring(22)
**************************************************************/
DECLARE EXTERNAL FUNCTION UUID_CREATE
  CSTRING(22)
  RETURNS PARAMETER 1
  ENTRY_POINT 'fn_uuid_create' MODULE_NAME 'uuidlib';

/**************************************************************
GUID_CREATE
Returns a GUID (cstring(36), standard readable representation
of a UUID in the xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx format)
Parameters: cstring(36)	dummy to allow Interbase to perform
  memory management
Returns:    cstring(36)
**************************************************************/
DECLARE EXTERNAL FUNCTION GUID_CREATE
  CSTRING(36)
  RETURNS PARAMETER 1
  ENTRY_POINT 'fn_guid_create' MODULE_NAME 'uuidlib'; 
Пред.: АдминистрированиеНачало: Документация FirebirdУровень выше: Переход с MS SQL на FirebirdСлед.: Синтакс SQL
Документация FirebirdДокументация по FirebirdПереход с MS SQL на Firebird → Типы данных