Полный список всех типов данных в Microsoft SQL Server
Заголовки:
Если оператор связывает два выражения различных типов данных, то по правилам приоритета типов данных определяется, какой тип данных имеет меньший приоритет и будет преобразован в тип данных с большим приоритетом. Если неявное преобразование не поддерживается, возвращается ошибка. Если оба операнда выражения имеют одинаковый тип данных, результат операции будет иметь тот же тип данных.
В SQL Server используется следующий приоритет типов данных:
Синонимы типов данных включены в SQL Server ради совместимости со спецификацией ISO. Эти синонимы и соответствующие им системные типы данных SQL Server приведены в следующей таблице.
Синоним | Системный тип данных SQL Server |
---|---|
Binary varying | varbinary |
char varying | varchar |
character | char |
character | char(1) |
character(n) | char(n) |
character varying(n) | varchar(n) |
Dec | decimal |
Double precision | float |
float[(n)] for n = 1-7 | real |
float[(n)] for n = 8-15 | float |
integer | int |
national character(n) | nchar(n) |
national char(n) | nchar(n) |
national character varying(n) | nvarchar(n) |
national char varying(n) | nvarchar(n) |
national text | ntext |
timestamp | rowversion |
Синонимы типов данных можно использовать вместо соответствующих базовых типов данных в инструкциях языка определения данных (data definition language, DDL), таких как CREATE TABLE, CREATE PROCEDURE или DECLARE @variable. Однако после создания объекта синонимы утрачивают силу. При создании объекта ему назначается базовый тип данных, связанный с синонимом. Никаких признаков того, что в инструкции, создавшей объект, был указан синоним, не остается.
Всем объектам, производным от первоначального объекта, таким, как столбцы результирующего набора или выражения, назначается базовый тип данных. Все последующие вызовы функций работы с метаданными, выполняемые для первоначального объекта и любых производных от него объектов, сообщают базовый тип данных, а не синоним. Это имеет место при работе с метаданными, например в процедуре sp_help и других системных хранимых процедурах, представлениях информационных схем и различных API-операции над метаданными, сообщающих типы данных столбцов таблицы или результирующего набора.
Точность представляет собой количество цифр в числе. Масштаб представляет собой количество цифр справа от десятичной запятой в числе. Например: число 123,45 имеет точность 5 и масштаб 2.
В среде SQL Server максимальная точность типов данных numeric и decimal по умолчанию составляет 38 разрядов. В более ранних версиях SQL Server максимум по умолчанию составляет 28.
Длиной для числовых типов данных является количество байт, используемых для хранения числа. Длина символьной строки или данных в Юникоде равняется количеству символов. Длина для типов данных binary, varbinary и image равна количеству байт. Например, тип данных int может содержать 10 разрядов, храниться в 4 байтах и не должен содержать десятичный разделитель. Тип данных int имеет точность 10, длину 4 и масштаб 0.
При сцеплении двух выражений типа char, varchar, binary или varbinary длина результирующего выражения является суммой длин двух исходных выражений, но не превышает 8 000 символов.
При сцеплении двух выражений типа nchar или nvarchar длина результирующего выражения является суммой длин двух исходных выражений, но не превышает 4 000 символов.
Если два выражения одного и того же типа данных, но разной длины, сравниваются с помощью предложения UNION, EXCEPT или INTERSECT, длина результата будет равняться длине максимального из двух выражений.
Точность и масштаб числовых типов данных, кроме decimal, фиксированы. Если арифметический оператор объединяет два выражения одного и того же типа, результат будет иметь тот же тип данных с точностью и масштабом, определенными для этого типа. Если оператор объединяет два выражения с различными числовыми типами данных, тип данных результата будет определяться правилами старшинства типов данных. Результат имеет точность и масштаб, определенные для этого типа данных.
Следующая таблица определяет, как вычисляется точность и масштаб результата, если результат операции имеет тип decimal. Результат имеет тип decimal, если одно из следующих утверждений является истиной:
Выражения операндов обозначены как выражение e1 с точностью p1 и масштабом s1 и выражение e2 с точностью p2 и масштабом s2. Точность и масштаб для любого выражения, отличного от decimal, соответствуют типу данных этого выражения
Операция | Точность результата | Масштаб результата * |
---|---|---|
e1 + e2 | max(s1, s2) + max(p1-s1, p2-s2) + 1 | max(s1, s2) |
e1 - e2 | max(s1, s2) + max(p1-s1, p2-s2) + 1 | max(s1, s2) |
e1 * e2 | p1 + p2 + 1 | s1 + s2 |
e1 / e2 | p1 - s1 + s2 + max(6, s1 + p2 + 1) | max(6, s1 + p2 + 1) |
e1 { UNION | EXCEPT | INTERSECT } e2 | max(s1, s2) + max(p1-s1, p2-s2) | max(s1, s2) |
e1 % e2 | min(p1-s1, p2 -s2) + max( s1,s2 ) | max(s1, s2) |
* Точность и масштаб результата имеют абсолютный максимум, равный 38. Если значение точности превышает 38, то соответствующее значение масштаба уменьшается, чтобы по возможности предотвратить усечение целой части результата.
Таблица ниже является упрощенной схемой связи между типами данныхSQL Server, SSIS и Biml. Таблица не включает все возможные комбинации и все виды типов данных, но полезна как быстрая ссылка при разработке и изучении Biml.
SQL Server | SSIS Variables | SSIS Pipeline Buffer | OLE DB | ADO.NET | Biml |
---|---|---|---|---|---|
bigint | Int64 | DT_I8 | LARGE_INTEGER | Int64 | Int64 |
binary | Object | DT_BYTES | - | Binary | Binary |
bit | Boolean | DT_BOOL | VARIANT_BOOL | Boolean | Boolean |
char | String | DT_STR | VARCHAR | StringFixedLength | AnsiStringFixedLength |
date | Object | DT_DBDATE | DBDATE | Date | Date |
datetime | DateTime | DT_DBTIMESTAMP | DATE | DateTime | DateTime |
datetime2 | Object | DT_DBTIMESTAMP2 | DBTIME2 | DateTime2 | DateTime2 |
datetimeoffset | Object | DT_DBTIMESTAMPOFFSET | DBTIMESTAMPOFFSET | DateTimeOffset | DateTimeOffset |
decimal | Decimal | DT_NUMERIC | NUMERIC | Decimal | Decimal |
float | Double | DT_R8 | FLOAT | Double | Double |
geography | - | DT_IMAGE | - | Object | Object |
geometry | - | DT_IMAGE | - | Object | Object |
hierarchyid | - | DT_BYTES | - | Object | Object |
image (*) | Object | DT_IMAGE | - | Binary | Binary |
int | Int32 | DT_I4 | LONG | Int32 | Int32 |
money | Object | DT_CY, DT_NUMERIC | CURRENCY | Currency | Currency |
nchar | String | DT_WSTR | NVARCHAR | StringFixedLength | StringFixedLength |
ntext (*) | String | DT_NTEXT | - | String | String |
numeric | Decimal | DT_NUMERIC | NUMERIC | Decimal | Decimal |
nvarchar | String | DT_WSTR | NVARCHAR | String | String |
nvarchar(max) | Object | DT_NTEXT | - | - | String |
real | Single | DT_R4 | FLOAT, DOUBLE | Single | Single |
rowversion | Object | DT_BYTES | - | Binary | Binary |
smalldatetime | DateTime | DT_DBTIMESTAMP | DATE | DateTime | DateTime |
smallint | Int16 | DT_I2 | SHORT | Int16 | Int16 |
smallmoney | Object | DT_CY, DT_NUMERIC | CURRENCY | Currency | Currency |
sql_variant | Object | DT_WSTR, DT_NTEXT | - | Object | Object |
table | Object | - | - | - | - |
text (*) | Object | DT_TEXT | - | - | AnsiString |
time | Object | DT_DBTIME2 | DBTIME2 | Time | Time |
timestamp (*) | Object | DT_BYTES | - | Binary | Binary |
tinyint | Byte | DT_UI1 | BYTE | Byte | Byte |
uniqueidentifier | String, Object | DT_GUID | GUID | Guid | Guid |
varbinary | Object | DT_BYTES | - | Binary | Binary |
varbinary(max) | Object | DT_IMAGE | - | Binary | Binary |
varchar | String | DT_STR | VARCHAR | String | AnsiString |
varchar(max) | Object | DT_TEXT | - | - | AnsiString |
xml | Object | DT_NTEXT | - | - | Xml |
(* Данные типы данных будут удалены в будущих версиях SQL Server. Избегайте использование этих типов данных в новых проектах и, по возможности, измените их в текущих проектах.)
General Type | Type | N value | Precision | Storage size, bytes | Range (in SQL Server) |
---|---|---|---|---|---|
Exact Numerics | bit | 1 | 1, 0 | ||
Exact Numerics | tinyint | 1 | 0 to 255 | ||
Exact Numerics | smallint | 2 | -2^15(-32768) to 2^15(32767) | ||
Exact Numerics | int | 4 | -2^31(-2 147 483 648) to (2^31(2 147 483 647) | ||
Exact Numerics | bigint | 8 | -2^63(-9 233 372 036 854 775 808) to 2^63(9 233 372 036 854 775 807) | ||
Exact Numerics | decimal | 1-9 10-19 20-28 29-38 |
5 9 13 17 |
from -10^38 +1 through 10^38 -1 | |
Exact Numerics | smallmoney | 4 | -214 748.3648 to 214 748.3647 | ||
Exact Numerics | money | 8 | -922 337 203 685 477.5808 to 922 337 203 685 477.5807 | ||
Approximate Numerics | float | 1-24 25-53 |
7 15 |
4 8 |
-3.40E+38 to -1.18E-38, 0 and 1.18E-38 to 3.40E+38 -1.79E+308 to -2.23E-308, 0 and 2.23E-308 to 1.79E+308 |
Date and Time | date | 3 | 0001-01-01 through 9999-12-31 January 1, 1 CE through December 31, 9999 CE |
||
Date and Time | smalldatetime | 4 | 1900-01-01 through 2079-06-06 January 1, 1900 through June 6, 2079 00:00:00 through 23:59:59 |
||
Date and Time | time | 8-11 12-13 14-16 |
3 4 5 |
00:00:00.0000000 through 23:59:59.9999999 | |
Date and Time | datetime2 | 1-2 3-4 5-7 |
6 7 8 |
0001-01-01 through 9999-12-31 January 1, 1 CE through December 31, 9999 CE 00:00:00 through 23:59:59.9999999 |
|
Date and Time | datetime | 8 | anuary 1, 1753 through December 31, 9999 00:00:00 through 23:59:59.997 |
||
Date and time | datetimeoffset | 26-29 30-34 |
8 10 |
0001-01-01 through 9999-12-31 January 1, 1 CE through December 31, 9999 CE 00:00:00 through 23:59:59.9999999 -14:00 throuth +14:00 |
|
Caracter Strings | char | 1-8000 | n | ||
Caracter Strings | varchar | 1-8000 | n + 2 | ||
Caracter Strings | varchar(max) | 1-(2^31 - 1) | 2^31 - 1 + 2 | ||
Caracter Strings | nchar | 1-4000 | |||
Caracter Strings | nvarchar | 1-4000 | |||
Caracter Strings | nvarchar(max) | 1-(2^31 - 1) | |||
Caracter Strings | ntext(*) | 1-(2^30 - 1) | n + n | ||
Caracter Strings | text(*) | 1-(2^31 - 1) | |||
Binary Strings | image(*) | 1-(2^31 - 1) | n | ||
Binary Strings | binary | 1-8000 | n | ||
Binary Strings | varbinary | 1-8000 | n | ||
Binary Strings | varbinary(max) | 1-(2^31 - 1) | n + 2 | ||
Other Data Types | cursor | ||||
Other Data Types | sql_variant | max 8016 | |||
Other Data Types | hierarchyid | max 892 | |||
Other Data Types | rowversion | 8 | |||
Other Data Types | timestamp(*) | ||||
Other Data Types | uniqueidentifier | 16 | |||
Other Data Types | xml | max 2Gb | |||
Other Data Types | table | ||||
Spatial Data Types | geometry | ||||
Spatial Data Types | geography |
General Type | Type | MySQL | Oracle | PostgreSQL | SQLite |
---|---|---|---|---|---|
Exact Numerics | bit | TINYINT(1) | NUMBER(3) | BOOLEAN | INTEGER |
Exact Numerics | tinyint | TINYINT(signed) | NUMBER(3) | SMALLINT | INTEGER |
Exact Numerics | smallint | SMALLINT | NUMBER(5) | SMALLINT | INTEGER |
Exact Numerics | int | MEDIUMINT, INT | NUMBER(10) | INT | INTEGER |
Exact Numerics | bigint | BIGINT | NUMBER(19) | BIGINT | INTEGER |
Exact Numerics | decimal | DECIMAL | NUMBER(p[,s]) | DECIMAL(p,s) | REAL |
Exact Numerics | smallmoney | DOUBLE | NUMBER(10,4) | MONEY | REAL |
Exact Numerics | money | DOUBLE | NUMBER(19,4) | MONEY | REAL |
Approximate Numerics | float | FLOAT DOUBLE; REAL |
FLOAT(49) | DOUBLE PRECISION | REAL |
Date and Time | date | DATE | DATE | TEXT | |
Date and Time | smalldatetime | TIMESTAMP | DATE | TIMESTAMP(0) | TEXT |
Date and Time | time | TIME | TIME | TEXT | |
Date and Time | datetime2 | DDATETIME | TIMESTAMP | TEXT | |
Date and Time | datetime | DATE | TIMESTAMP(3) | TEXT | |
Date and time | datetimeoffset | TIMESTAMP with time zone |
TEXT | ||
Caracter Strings | char | CHAR | CHAR | CHAR | TEXT |
Caracter Strings | varchar | VARCHAR | VARCHAR2 | VARCHAR | TEXT |
Caracter Strings | varchar(max) | VARCHAR2 | TEXT | TEXT | |
Caracter Strings | nchar | NCHAR | NCHAR | TEXT | |
Caracter Strings | nvarchar | NCHAR | VARCHAR | TEXT | |
Caracter Strings | nvarchar(max) | VARCHAR TINYTEXT TEXT(M) MEDIUMTEXT LONGTEXT |
NCHAR | TEXT | TEXT |
Caracter Strings | ntext(*) | LONG | TEXT | TEXT | |
Caracter Strings | text(*) | LONG | TEXT | TEXT | |
Binary Strings | image(*) | LONGBLOB | LONG RAW | BYTEA | BLOB |
Binary Strings | binary | BINARY | RAW | BYTEA | BLOB |
Binary Strings | varbinary | RAW | BYTEA | BLOB | |
Binary Strings | varbinary(max) | VARBINARY(M) TINYBLOB BLOB MEDIUMBLOB LONGBLOB |
RAW | BYTEA | BLOB |
Other Data Types | cursor | TEXT | |||
Other Data Types | sql_variant | BLOB | TEXT | ||
Other Data Types | hierarchyid | TEXT | |||
Other Data Types | rowversion | BYTEA | TEXT | ||
Other Data Types | timestamp(*) | RAW | BYTEA | TEXT | |
Other Data Types | uniqueidentifier | CHAR | CHAR(36) | CHAR(16) | TEXT |
Other Data Types | xml | XML | TEXT | ||
Other Data Types | table | - | |||
Spatial Data Types | geometry | VARCHAR | TEXT | ||
Spatial Data Types | geography | VARCHAR | TEXT |
(* Данные типы данных будут удалены в будущих версиях SQL Server. Избегайте использование этих типов данных в новых проектах и, по возможности, измените их в текущих проектах.)