Типы данных Microsoft SQL Server
В Microsoft SQL Server у каждого столбца таблицы, локальной переменной, выражения и параметра есть определенный тип данных. Тип данных - это атрибут, определяющий, какого рода данные могут храниться в объекте: целые числа, символы, данные денежного типа, метки даты и времени, двоичные строки и так далее.
SQL Server предоставляет набор системных типов данных, определяющих все типы данных, которые могут использоваться в нем. Можно также определять собственные типы данных в Transact-SQL или Microsoft .NET Framework.
Точные числа
Типы точных числовых данных, использующие целые значения.
Тип данных | Диапазон | Хранилище |
bigint | от -2^63 (-9 223 372 036 854 775 808) до 2^63-1 (9 223 372 036 854 775 807) | 8 байт |
int | от -2^31 (-2 147 483 648) до 2^31-1 (2 147 483 647) | 4 байта |
smallint | от -2^15 (-32 768) до 2^15-1 (32 767) | 2 байта |
tinyint | от 0 до 255 | 1 байт |
Логические значения
bit - целочисленный тип данных, который может принимать значения 1, 0 или NULL. Компонент SQL Server Database Engine оптимизирует хранение столбцов типа bit, объединяя значения отдельных битовых полей в байты, например, если в таблице имеется 8 или меньше столбцов типа bit, они хранятся как 1 байт. Если имеется от 9 до 16 столбцов типа bit, они хранятся как 2 байта и т.д.
Строковые значения TRUE и FALSE можно преобразовать в значения типа bit: TRUE преобразуется в 1, а FALSE - в 0.
Десятичные и числовые
Типы числовых данных с фиксированными точностью и масштабом.
decimal[ (p[ ,s] )] и numeric[ (p[ ,s] )]
Числа с фиксированной точностью и масштабом. При использовании максимальной точности числа могут принимать значения в диапазоне от -10^38+1 до 10^38-1. В стандарте ISO синонимом типа decimal являются типы dec и dec(p, s). Тип numeric функционально равнозначен типу decimal.
P (точность)
Максимальное количество десятичных разрядов числа (как слева, так и справа от десятичной запятой). Точность должна принимать значение от 1 до 38. По умолчанию для точности принимается значение 18.
s(масштаб)
Максимальное количество десятичных разрядов числа справа от десятичной запятой. Масштаб может принимать значение от 0 до p. Масштаб может быть указан только совместно с точностью. По умолчанию масштаб принимает значение 0; поэтому 0 <= s <= p.
Максимальный размер хранилища зависит от точности.
Точность | Байты хранилища |
1 - 9 | |
10-19 | |
20-28 | |
29-38 |
Типы данных, представляющие денежные (валютные) значения
Тип данных | Диапазон | Хранение |
money | От -922 337 203 685 477,5808 до 922 337 203 685 477,5807 | 8 байт |
smallmoney | От -214 748,3648 до 214 748,3647 | 4 байта |
Типы данных money и smallmoney имеют точность до одной десятитысячной денежной единицы, которую они представляют.
Приблизительные числа
Типы приблизительных числовых данных, используемые для хранения числовых данных с плавающей запятой. Данные с плавающей запятой являются приблизительными, поэтому не все значения из диапазона могут быть отображены точно.
Тип данных | Диапазон | Объем памяти |
float | - 1,79E+308 — -2,23E-308, 0 и 2,23E-308 — 1,79E+308 | Зависит от значения n |
real | - 3,40E + 38 — -1,18E - 38, 0 и 1,18E - 38 — 3,40E + 38 | 4 байта |
float [ (n) ]
Где n – это количество битов, используемых для хранения мантиссы числа в формате float при экспоненциальном представлении. Определяет точность данных и размер для хранения. Значение параметра n должно лежать в пределах от 1 до 53. Значением по умолчанию для параметра n является 53.
n | Точность | Объем памяти |
1–24 | 7 знаков | 4 байта |
25–53 | 15 знаков | 8 байт |
Дата и время
В предыдущих версия Microsoft SQL Server существовали только два типа, обеспечивавших хранение дат и времени: datetime иsmalldatetime.
При разработке реальных приложений часто приходилось сталкиваться с практическими ограничениями этих типов. Поскольку оба типа предназначены для хранения даты и времени, при необходимости хранить только дату или только время приходилось оговаривать фиксированную часть. Например, если необходимо хранить только время, для даты можно выбрать фиксированное значение 01-01-2010. Недостатком такого подхода является усложнение логики приложения, поскольку при изменении значений каждый раз необходимо дату на соответствие 01-01-2010. В противном случае возможны некорректные сравнения, если не совпадает дата.
Тип данных | Диапазон дат | Диапазон времени | Объем памяти | Максимальная Точность |
datetime | От 01.01.1753 до 31.12.9999 | От 00:00:00 до 23:59:590,997 | 8 байт | Округлено до приращения 0,000, 0,003 или 0,007 секунд |
smalldatetime | От 01.01.1900 до 06.06.2079 | От 00:00:00 до 23:59:59 | 4 байта, фиксированный. | Одна минута |
date | От 01.01.0001 до 31.12.9999 | 3 байта, фиксированный | Один день | |
time[(0-7)] | От 00:00:00 до 23:59:59.9999999 | 3-5 байт, зависит от точности | 100 наносекунд | |
datetime2 [(0-7)] | От 01.01.0001 до 31.12.9999 | От 00:00:00 до 23:59:59.9999999 | 6 байт для 2 и менее цифр, 7 байт для 3 и 4 цифр. 8 байт. | 100 наносекунд |
Datetimeoffset[(0-7)] Учитывает часовой пояс | От 01.01.0001 до 31.12.9999 | От 00:00:00 до 23:59:59.9999999 | 10 байт, зависит от точности | 100 наносекунд |
Типы данных datetime иsmalldatetime, существовавшие в предыдущих версиях SQL Server, имели более низкую точность по сравнению с новыми типами, и не имели возможности учитывать часовой пояс.
Символьные строки
char [ ( n ) ]
Символьные данные фиксированной длины, не в Юникоде, с длиной n байт. Значение n должно находиться в интервале от 1 до 8000. Размер хранения данных этого типа равен n байт. Синонимом по стандарту ISO для типа char является character.
varchar [ ( n | max ) ]
Символьные данные переменной длины, не в Юникоде. n может иметь значение от 1 до 8 000. max означает, что максимальный размер хранения равен 2^31-1 байт. Размер хранения равен фактической длине данных плюс два байта. Введенные данные могут иметь длину 0 символов. Синонимами по стандарту ISO для типа varchar являются типы charvarying или charactervarying.
nchar [ ( n ) ]
Символьные данные в Юникоде длиной в n символов. Аргумент n должен иметь значение от 1 до 4000. Размер хранилища вдвое больше n байт. Синонимами по стандарту ISO для типа nchar являются типы national char и national character.
nvarchar [ ( n | max ) ]
Символьные данные в Юникоде переменной длины. Аргумент n может принимать значение от 1 до 4 000. Аргумент max указывает, что максимальный размер хранилища равен 2^31-1 байт. Размер хранилища в байтах вдвое больше числа введенных символов + 2 байта. Введенные данные могут иметь длину в 0 символов. Синонимами по стандарту ISO для типа nvarchar являются типы national char varying и national character varying.
Двоичные данные
binary [ ( n ) ]
Двоичные данные фиксированной длины размером в n байт, где n — значение от 1 до 8000. Размер хранения составляет n байт.
varbinary [ ( n | max) ]
Двоичные данные переменной длины. n могут иметь значение от 1 до 8000; max означает максимальную длину хранения, которая составляет 2^31-1 байт. Размер хранения — это фактическая длина введенных данных плюс 2 байта. Введенные данные могут иметь размер 0 символов. В ANSI SQL синонимом для varbinary является binary varying.