Документация Firebird → Документация по Firebird → Переход с MS SQL на Firebird → Типы данных |
Этот раздел описывает различные типы данных, доступные в СУБД 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 используется для хранения булевого (логического) значения, 0 или 1. СУБД MS SQL не поддерживает присваивание значения NULL таким полям. Пользователи СУБД Firebird могут эмулировать поведение логического типа, используя типы SMALLINT или CHAR(1).
Возможные значения полей логического типа в СУБД Firebird могут быть ограничены через использование доменов (domains).
Существует несколько способов переноса механизма идентификаторов СУБД 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
В СУБД 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 → Документация по Firebird → Переход с MS SQL на Firebird → Типы данных |