Технологии в современном мире развиваются невероятными темпами. Всё больше появляется информации, которую необходимо где-то сохранять и правильно структурировать. Наибольшие объёмы по хранению важной информации занимают разнообразные базы данных.
Что это такое?
На сегодняшний день есть несколько определений для понятия «типы данных». Между собой они все очень похожи и дают примерно одинаковый ответ. Их можно обозначить как определённую группу данных, которая характеризуется её значениями и операциями, с которыми она работает.
Описание типов данных SQL
Стандарт SQL основан на самых обширных и распространённых группах данных, но с немного расширенными спецификациями.
Точные числа
Bit – используется для хранения столбцов, 8 и менее столбцов занимают 1 байт, от 9 до 16 – 2 байта и так далее. Работая с строковыми значениями TRUE, FALSE их можно преобразовать в значения bit. Первое в таком случае будет 1, а второе будет 0.
Tinyint с хранилищем в 8 бит имеет свойства целых чисел от 0 до 255.
Smalint уже имеет занимаемое место в 16 бит и числа от -2^15 (-32 768) до 2^15-1 (32 767).
Int – 32 бита и это является основным целочисленным типом данных в SQL Server от –2^31 (–2 147 483 648) до 2^31-1 (2 147 483 647).
Bigint – 64 бита и как понятно из названия ещё большее кол-во от -2^63 (-9 223 372 036 854 775 808) до 2^63-1 (9 223 372 036 854 775 807).
Numeric (p, s) и Decimal (p, s) – Точность: от 1 до 9 = 40 бит; 10-19 = 72 бита; 20-28 = 104 бит; 29-38 = 136 бит. У этой группы особенностью является установленная точность и масштаб. Между собой они эквивалентны. P (точность) – это величина максимального количества десятичных разрядов числа. Величины могут быть от 1 до 38, стандартно 18. S (масштаб) — также максимальное кол-во десятичных разрядов справа от запятой. Исходя из этого, можно сделать вывод что максимальное число цифр слева от запятой определяется как (точность – масштаб) соответственно p – s. Предел точности регулирует занимаемое место, которое имеет хранилище. Могут выступать от –10^38+1 до 10^38–1.
Smallmoney – 32 бита, это тип данных в SQL и My SQL для использования с денежными единицами, точность которого до одной десятитысячной. Значения могут принимать от -214^748,3648 до 214^748,3647.
Money – 64 бита, также применяется для использования с денежными единицами, точность, как и у прошлого. Величины от -922 337 203 685 477,5808 до 922 337 203 685 477,5807.
Не стоит использовать типы приблизительных чисел в предложениях WHERE, так как в них нет точных значений. Не стоит работать с такими группами и в финансовых операциях или операциях с округлениями. Для этого есть money, smallmoney и decimal.
Приблизительные числа
Float(n) – хранилище его зависит от n и может быть 4 или 8 байт. От 1 до 24 это 4 байта, от 25 до 53 это 8 байт соответственно. Применяется в случае где необходимы числовые значения, у которых плавающая запятая. N – определяет кол-во битов, которые задействованы для хранения мантиссы числа в данном формате. Также определяет максимальное занимаемое место. Варианты от 1 до 53, стандартно 53. Значения от –1,79E +308 до 1,79E+308.
Real – 32 бита, используется также, как и прошлый. Он соответствует float(24). Изменятся он может от –3.40E+38 до 3.40E+38.
Text – представляет собой тип данных переменной длинны, максимальная длинна строки которого 2 147 483 647. Даже при использовании двухбайтовых символов, объём не превысит данной величины. Занимаемое место может быть меньше, всё зависит от строки символов.
Символьные строки
Char ( n ) – хранилище, которого определяется количеством n. Имеет фиксированную длину, также n указывает на величину строки (в байтах). Однобайтовые кодировки, величина при хранении равна величине хранимых символов. В многобайтовых кодировках, вес по-прежнему равен n, а кол-во хранимых символов уже может отличаться и быть меньше. Бывает от 1 до 8000.
Varchar ( n | max ) — это тип строковых данных с переменной длинной. N – определяет величину строки (в байтах). Можно воспользоваться и указать max, тогда длинна столбца будет максимальной. В однобайтовых кодировках, занимаемое место хранилища всегда будет n + 2 байта, а количество хранимых символов будет n.
Символьные строки в Юникоде
Nchar ( n ) — данные, которые имеют неизменную длину. От 1 до 4000 значения параметра n, определяющего величину строки в парах байтов. Его размер составляет 2n байт.
Nvarchar ( n | max ) — также, как и прошлый тип, но уже с переменным размером. Величина имеет от 1 до 4000, n как и у прошлого типа данных указывает на размер строки в парах байт. Если указано max, это даёт понять, что максимальный размер хранения 2^30-1. В хранении представляет собой 2n+2.
Ntext — уже не популярный тип данных из-за своего возраста. Длинна строки переменная, используемая память равна количеству символов в строке увеличенное в два раза. Размер хранилища может достигать 230—1.
Дата и время
Date — занимает 24 бита, может быть от 01.01.0001 до 31.12.9999 с точностью в 1 день. Применяется для сохранения даты.
Datetime — занимает 64 бита, изменяется от 01.01.1753 00:00:00 до 31.12.9999 23:59:59,997, имеет точность в 0.00333 сек. Применяется для хранения даты и времени.
Datetime2 — размер его изменяется из-за его точности от 6 до 8 байт. Варианты чисел могут быть от 01.01.0001 00:00:00.0000000 до 31.12.9999 23:59:59.9999999, имеет высокую точность в 100 наносекунд. Более точный аналог предыдущего варианта.
Smaldate — 32 бита, выступает вариантами от 01.01.1900 00:00:00 до 06.06.2079 23:59:00 точность его 1 мин. Упрощённый вариант первого, с меньшим диапазоном.
Time — занимаемое место изменяется 3-5 байт. Изменяется от 00:00:00.0000000 до 23:59:59.9999999, точность 100 наносекунд. Применяется для указания времени суток.
Datetimeoffset — размер от 8 до 10 байт. Значения от 01.01.0001 00:00:00.0000000 до 9999-12-31 23:59:59.9999999. Точность составляет 100 наносекунд. Применяется при работе с временем и датой, принимая в учёт изменение часовых поясов.
Двоичные данные
Нижеприведённые группы имеют двоичную форму.
Binary (n) — занимаемое место определяется n. Имеет неизменный размер и длину. Вариация чисел от 1 до 8000. Используется при том, если заранее есть информация, которая будет находится в столбцах и есть понимание какой она будет.
varbinary ( n | max ) — в хранилище занимает места равное его величине и плюс 2 байта. При параметре max размер увеличится до 2 ГБ. Имеет изменяемую величину параметра n, который выступает от 1 до 8000.
Image — хранилище аналогично с прошлым вариантом. Не актуальный.
Прочие типы данных
Cursor — используется для определения ссылки на курсор.
Table — используется в работе с таблицами, чтобы указывать окончательные значения.
Sql_variant — может содержать в себе практически любые группы данных.
Rowversion — имеет величину в 8 байт и выполняет создание уникальных двоичных чисел.
Xml — максимальный размер до 2-х ГБ. Содержит в себе данные XML.
Uniqueidentifier — 16 байт, глобальный уникальный идентификатор.
Hierarchyid — размер до 892 байта применяется при указании места в древовидной системе.