Что это такое? Типы данных SQL необходимы для организации работы всей базы. В таблице каждый столбец обязан иметь имя и указание на информацию, которая в нем содержится. Это определяет как язык, на котором написана БД, будет взаимодействовать с наполнением таблицы.
Какие бывают? В каждой конкретной СУБД существуют свои типы данных. Более того, в некоторых системах они могут иметь одинаковое название, но разные функции, поэтому всегда важно знакомиться с документацией до начала работы.
В статье рассказывается:
- Задачи типов данных в SQL
- Виды типов данных SQL
- Хранение типов данных SQL
- Преобразование типов данных
-
Пройди тест и узнай, какая сфера тебе подходит:
айти, дизайн или маркетинг.Бесплатно от Geekbrains
Задачи типов данных в SQL
Для начала определим, о каких данных мы говорим? В данной статье речь пойдёт о типе данных, которые любая переменная или столбец могут хранить в MS SQL Server.
Когда мы создаём любую таблицу или переменную, мы указываем имя, а также тип данных, которые будут храниться.
Тип данных таблицы SQL, которые будут храниться в столбце или в переменной, необходимо определять заранее. Это ограничит пользователя от возможности ввести любые неожиданные или недействительные данные.
Как наиболее эффективно использовать память? Для начала назначьте соответствующий тип данных переменной или столбцу, в котором будет выделяться тот объём, который необходим системной памяти для данных столбца SQL.
MS SQL обеспечивает широкую категорию типов данных, которая соответствует потребностям конкретного пользователя: например, двоичные изображения, дата и др.
В качестве иллюстрации можно взять простую страницу регистрации приложения web-сайта. Мы имеем три поля ввода: Имя, Фамилия, Контактный номер.
входят в ТОП-30 с доходом
от 210 000 ₽/мес
Скачивайте и используйте уже сегодня:
Топ-30 самых востребованных и высокооплачиваемых профессий 2023
Поможет разобраться в актуальной ситуации на рынке труда
Подборка 50+ бесплатных нейросетей для упрощения работы и увеличения заработка
Только проверенные нейросети с доступом из России и свободным использованием
ТОП-100 площадок для поиска работы от GeekBrains
Список проверенных ресурсов реальных вакансий с доходом от 210 000 ₽
Обратите внимание, что в режиме реального времени:
- поля «Имя» и «Фамилия» всегда будут буквенными;
- поле «Контактный номер» всегда будет числовым.
Таким образом, «Имя» и «Фамилия» надо указать как символ, а «Контактный номер» – как целое число.
Каждое поле имеет определённый тип данных. Это могут быть числовые данные, буквенные, формат даты и др.
У разных типов данных будут различные требования к памяти. Для того чтобы память использовалась эффективно, определяйте переменную или столбец с типом данных, которые будут храниться в нём.
Виды типов данных SQL
Строковые типы данных
К этому типы относят имена, названия, адреса и другие данные, которые выражаются словами. Строковые типы – самые распространённые.
Независимо от типа строки, её всегда заключают в одинарные кавычки. Все строковые типы условно делятся на две группы: переменной и фиксированной длины.
У строк с переменной длиной есть ограничение по максимальному размеру поля данной СУБД, но нет ограничений «сверху». В некоторых типах встречается «нижняя граница» – минимальное количество символов. В целом, возможны разные по длине значения, и необходимости ставить дополнительные пробелы при этом нет.
Определение фиксированной длины повышает производительность: получение, изменение и сортировка данных реализуется намного быстрее, когда в СУБД заложено конкретное количество символов на строку. Индексирование столбцов тоже увеличивает скорость работы: в некоторых СУБД оно возможно только в случае определения фиксированной длины строки.
Скачать файлПеречислим основные строковые типы данных:
- CHAR – фиксированная длина строки. В процессе создания таблицы определяется точное значение – от 1 до 225 символов;
- NCHAR – одна из разновидностей CHAR, которая поддерживает Unicode или многобайтовые символы
- TEXT (она же LONG, VARCHAR или MEMO) – строки переменной длинны
- NVARCHAR – подвид TEXT, которые поддерживает Unicode или многобайтовые символы
Читайте также!
Давайте разберёмся, почему не стоит хранить в числовых форматах номера документов, домов и телефонов.
Есть несколько причин. Во-первых, строковые форматы являются более экономичным способом хранить данные в БД. Во-вторых, в числовом типе данных удаляются все нули в начале значения: они считываются как неинформативные и, следовательно, лишние. При этом номера документов вполне могут начинаться с нулей: например, 0006382. После переработки данные просто станут некорректными.
на курсы от GeekBrains до 22 декабря
Выбирайте числовой формат, когда вам необходимо производить операции сложения или вычитания полей, вычислять среднее значение столбца, находить максимальные значения.
Числовые типы данных
Этот тип данных обеспечивает возможность не только хранить числа, но и производить математические операции и прочие логические действия.
Числа отличаются от строк тем, что без кавычек помещаются в БД. Типы отличаются друг от друга размерами диапазонов значений. Чем меньше допустимый диапазон, тем меньше он требует места для хранения введённого числа.
Некоторые типы хранят исключительно целые числа, а другие могут содержать принимающие дроби.
Названия могут отличаться в зависимости от конкретной СУБД; актуальные заголовки проверяйте в документации. Примерно опишем варианты:
- NUMBER или FLOAT – числа с плавающими точками;
- NUMERIC или DECIMAL – числа с фиксированными или плавающими точками;
- BIT – одноразрядное значение, которое используют для битовых флагов: 0 или 1;
- REAL – 4-байтовые числа с плавающими точками;
- INTEGER или INT – целые 4-байтовые числа, у которых диапазон значений варьируется от -2147483648 до 2147483647;
- TINYINT – целые 1-байтовые числа в диапазоне от 0 до 255;
- SMALLINT – целые 2-байтовые числа в диапазоне от -32768 до 32767.
В некоторых СУБД денежный тип данных выделен в отдельную категорию. Он может относиться к типу DECIMAL, но обладать более удобным для денежных значений диапазоном. Его называют MONEY или CURRENCY.
Типы данных, включающие обозначение даты и времени
То или иное обозначение времени и даты включено во всех СУБД. Они, как и числовые форматы, отличаются друг от друга степенью точности и допустимым диапазоном. Варианты:
- DATE – дата;
- TIME – время;
- TIMESTAMP или DATETIME – дата и время;
- SMALLDATETIME – дата и время с точностью до минуты.
Бинарные типы данных
Этот тип данных обеспечивает содержание любых данных в бинарном виде. Это может быть графика, текст, медиа или двоичный код. На самом деле, бинарные типы используют довольно редко, поскольку они плохо совместимы в формате разных СУБД. И всё же порой они упрощают работу, так что приведём основные:
- BINARY – данные в двоичном виде в диапазоне от 255 до 8000 байт;
- RAW – данные фиксированной длинны в двоичном виде в диапазоне до 255 байт;
- LONG RAW – данные переменной длины в двоичном виде в диапазоне до 2Гбайт;
- VARBINARY – данные переменной длины в двоичном виде в диапазоне до 8000 байт или до 255 байт в зависимости от реализации.
Хранение типов данных SQL
Расскажем о двух вариантах хранения, которые позволяют хранить объекты LOB, экономя дисковое пространство.
Хранение данных типа FILESTREAM
LOB – большие объекты – хранятся в SQL Server с помощью типа данных MAX или VARBINARY. BLOB — большие двоичные объекты – хранятся в базе данных. Из-за этого могут возникать проблемы с производительностью, когда вы пытаетесь сохранить видео- или аудиофайлы. Во избежание нарушения работы такие данные сохраняют во внешних файлах за пределами базы данных.
Объекты LOB хранятся в файловой системе NTFS. Этот тип хранения позволяет данным, хранящимся вне базы, управляться базой. Основные характеристики:
- возможность хранения данных FILESTREAM при помощи инструкций CREATE TABLE, а в процессе работы с этими данными используются инструкции для модификации данных (DELETE, UPDATE, SELECT и INSERT);
- обеспечение для данных типа FILESTREAM того же уровня безопасности, что и у данных, которые хранятся внутри базы.
Разреженные столбцы (sparsecolumns)
Этот вариант хранения преследует совершенно иную цель.
Если тип FILESTREAM хранит объекты LOB вне базы данных, то разреженные столбцы минимизируют дисковое пространство, которое занимает база данных.
Это обеспечивает оптимизацию хранения столбцов, у которых большинство значений равняется null. Когда вы используете разреженные столбцы для хранения значений null, вам не требуется дисковое пространство. При этом для хранения значений, которые отличаются от null, потребуется дополнительные байты (от 2 до 4). Поэтому разреженные столбцы рекомендуются к использованию только тогда, когда вы ожидаете сэкономить не менее 20% дискового пространства.
Разреженные столбцы определяют так же, как и другие столбцы таблицы, а значит, обращаются к ним аналогично. При обращении к разреженному столбцу используйте инструкции DELETE, UPDATE , SELECT и INSERT так же, как и при работе с обычными столбцами.
Но всё же есть и отличие: когда вы создаёте разреженные столбцы, применяйте аргумент SPARSE, чтобы определить конкретный столбец разреженным.
Вот пример того, как это сделать:
имя_столбца тип_данных SPARSE
Разреженные столбцы таблицы при необходимости можно группировать в наборы столбцов. Это альтернативный способ хранения значений во всех разреженных столбцах таблицы.
Значение NULL
«Null» является одним из специальных значений, которые присваивают ячейкам таблиц. Его применяют в тех случаях, когда информация неприменима или совсем неизвестна. Приведём пример, если вы не знаете домашний номер телефона клиента, вы находите столбец home_telephone и присваиваете соответствующей ячейке значение null.
Важно понимать, что когда значение любой переменной арифметического действия равно null, результат его вычисления тоже будет обозначен как null.
Поэтому, если у вас есть унарная арифметическая операция, в которой значение выражения A равняется null, действие +A или -A будет возвращать null.
Бинарные выражения будут действовать так же. Когда A и B равняется null, результат любых операций (умножение, деление, деление по модулю, сложения, вычитания) этих операндов будет тоже обозначен как null.
Когда в выражении содержится операция сравнения, а значение одного или обоих операндов равняется null, результат действия снова будет null.
Значение null сохраняется в столбцах таблицы только тогда, когда это явно разрешается определением данного столбца. При этом значения null недоступны для столбца, если в его определении напрямую указано «NOT NULL».
Когда для столбца с каким-либо типом данных не указано напрямую NULL или NOT NULL, мы присваиваем следующие значения:
- NULL, когда значение параметров ANSI_NULL_DFLT_ON в инструкции SET равняется on.
- NOT NULL, когда значение параметров ANSI_NULL_DFLT_OFF в инструкции SET равняется on.
Если вы не активируете инструкцию set, столбец будет автоматически определяться как NOT NULL. При этом столбцы типа TIMESTAMP не могут иметь значение null ни при каких обстоятельствах.
Преобразование типов данных
Часто возникает необходимость конвертации значений одного типа в значение другого. Как же изменить тип данных в SQL?
Для выполнения конвертирования числа в символьные данные используют специализированную функцию STR. Чтобы выполнить другие преобразования, SQL Server содержит универсальные функции CAST и CONVERT, которые позволяют преобразовывать значения одного типа в значения другого типа. Эти функции взаимозаменяемы. Приведём пример:
Читайте также!
CAST(выражение AS тип_данных) CONVERT(тип_данных[(длина)], выражение [,стиль])
Существует аргумент «стиль», который делает возможным управление стилями представления значений некоторых типов данных (нецелочисленные, дата и время, денежные).
DECLARE @d DATETIME DECLARE @s CHAR(8) SET @s=’29.10.01’ SET @d=CAST(@s AS DATETIME)2.3.
В данной статье мы постарались описать основные типы данных, которые традиционно используются в SQL. Однако важно помнить, что в разных проектах заголовки и точные характеристики типов могут отличаться. Обращайте внимание на ваши требования и подбирайте тип, позволяющий их реализовать.