Часть 6: Типы данных в SQL
Здравствуйте, уважаемые посетители сайта ZametkiNaPolyah.ru. Продолжаем изучать базы данных и наше знакомство с библиотекой SQLite3. В данной публикации мы рассмотрим типы данных в SQL. Хочу обратить ваше внимание на то, что различные СУБД поддерживает различный набор типов данных, поэтому это публикация включает в себя самые часто встречающиеся типы данных в SQL реализации различных СУБД.
Типы данных в SQL важно знать, чтобы правильно и грамотно проектировать базы данных, правильно выбранный типа данных в SQL может очень сильно облегчить работу другим разработчикам. Поэтому не советую вам пропускать раздел о типах данных и всегда, когда вы знакомитесь с новой СУБД, обращать внимание на типы данных, которые поддерживает программа и на то, как она эти типы данных обрабатывает.
Содержание статьи:
Типы данных в SQL
Рассмотрим типы данных, которые есть в языке SQL. У каждого столбца таблицы (у атрибута) должен быть тип данных для значений, которые хранятся в столбце. Тип данных для столбца определяется при создании таблицы, а еще лучше, когда он определяется на этапе проектирования баз данных.
Язык SQL делит данные на пять типов:
- Целочисленный тип данных SQL.
- Вещественный тип данных SQL.
- Типы данных даты и времени SQL.
- Строковый тип данных SQL.
- Строковый тип данных SQL в кодировки Юникод.
Давайте посмотрим, что включает в себя каждый из типов данных SQL и какие значения они позволяют нам хранить.
Целочисленный тип данных SQL
Целочисленный тип данных в SQL довольно таки широкий и зависит от реализации СУБД, снизу в таблицы лишь некоторые типичные примеры целочисленного типа данных SQL.
Тип данных SQL | от | до |
bigint | -9,223,372,036,854,775,808 | 9,223,372,036,854,775,807 |
int | -2,147,483,648 | 2,147,483,647 |
smallint | -32,768 | 32,767 |
tinyint | 0 | 255 |
bit | 0 | 1 |
decimal | -10^38 +1 | 10^38 -1 |
numeric | -10^38 +1 | 10^38 -1 |
money | -922,337,203,685,477.5808 | +922,337,203,685,477.5807 |
smallmoney | -214,748.3648 | +214,748.3647 |
Еще раз повторюсь, что набор целочисленных типов данных в SQL зависит целиком и полностью от СУБД.
Вещественный тип данных SQL
Вещественный тип данных SQL, как и целочисленный тип данных, целиком и полностью зависит от реализации СУБД.
Тип | от | до |
float | -1.79E + 308 | 1.79E + 308 |
real | -3.40E + 38 | 3.40E + 38 |
Тип данных даты и времени
Обычно в различных СУБД дата и время — это отдельно выделенный тип данных
Тип данных SQL | от | до |
datetime | Jan 1, 1753 | Dec 31, 9999 |
smalldatetime | Jan 1, 1900 | Jun 6, 2079 |
date | Сохраняет дату как June 30, 1991 | |
time | Сохраняет время как 12:30 P.M. |
Строковый тип данных SQL
Строковых типов данных в SQL может быть гораздо больше, смотрите спецификацию своей СУБД, чтобы узнать какой тип данных может быть использован для строковых значений.
Тип данных SQL | Описание |
char | Максимальная длина 8000 символов (все значения в столбце имеют фиксированный размер, указанный при объявлении столбца). Обратите внимание: единица измерения SQL типа данных char - символ. |
varchar | Максимальная длина 8000 символов (все значения в столбце имеют различный размер в зависимости от количества символов, но не более того размера, что был указан при объявлении столбца). Обратите внимание: единица измерения SQL типа данных varchar - символ. |
varchar (max) | Максимальная длина 231 символ. Обратите внимание: единица измерения SQL типа данных varchar (max) - символ. |
text | Максимальная длина 2,147,483,647 символов. Обратите внимание: единица измерения SQL типа данных text - символ. |
Строковый тип данных SQL в кодировке юникод
Да, некоторые СУБД выделяют строковый тип данных в кодировке юникод, поскольку в строках с кодировкой юникод на запись одного символа тратится, как минимум, 8 байт, поэтому мы и выделяем строковый тип данных в SQL с кодировкой юникод.
Тип данных SQL | Описание |
nchar | Максимальная длина 4000 символов (все значения в столбце имеют фиксированный размер, указанный при объявлении столбца). Обратите внимание: единица измерения SQL типа данных nchar - символ. |
nvarchar | Максимальная длина 4000 символов (все значения в столбце имеют различный размер в зависимости от количества символов, но не более того размера, что был указан при объявлении столбца). Обратите внимание: единица измерения SQL типа данных nvarchar - символ. |
nvarchar (max) | Максимальная длина 231 символ. Обратите внимание: единица измерения SQL типа данных nvarchar (max) — символ. |
ntext | Максимальная длина 1,073,741,823 символов. Переменная длина. Обратите внимание: единица измерения SQL типа данных ntext — символ. |
Бинарный тип данных в SQL
Бинарный тип данных в SQL используется для хранения информации в бинарном виде (в виде последовательности байт).
Тип данных SQL | Описание |
binary | Максимальная длина 8,000 байт (все значения в столбце имеют фиксированный размер, указанный при объявлении столбца). Обратите внимание: единицы измерения типа данных binary — байты. |
varbinary | Максимальная длина 8,000 байт (все значения в столбце имеют различный размер в зависимости от количества символов, но не более того размера, что был указан при объявлении столбца). Обратите внимание: единицы измерения типа данных varbinary — байты. |
varbinary (max) | Максимальная длина 231 байт. Обратите внимание: единицы измерения типа данных varbinary (max) — байты. |
image | Максимальная длина 2,147,483,647 байт (все значения в столбце имеют различный размер в зависимости от количества символов, но не более того размера, что был указан при объявлении столбца). Обратите внимание: единицы измерения типа данных image — байты. |
Хочу обратить ваше внимание на то, что каждая СУБД поддерживает свой набор типов данных и размерностей, мы рассмотрели базовые типы данных языка SQL, в следующей теме мы рассмотрим типы данных, которые поддерживает SQLite3.
Знаковые и без знаковые типы данных в SQL
Хочу обратить ваше внимание на то, что в некоторых СУБД числовые типы данных могут делиться на знаковые и без знаковые типы данных. И это совершенно разные типы данных.
Например, если у вас в одной таблице хранится id INTEGER UNSIGNED, а в другой id_table1 INTEGER SIGNED, то связь между таблицами по этим двум столбцам вы реализовать не сможете, так как у них разные типы данных. Будьте внимательны и всегда читайте описания типов данных, когда начинаете использовать новую СУБД.
Приведем пример практического применения типов данных SIGNED и UNSIGNED. Например, у MySQL есть тип данных TINYINT, который занимает один байт и прекрасно подходит для хранения возраста, следовательно, в столбец с типом TINYINT можно записывать целые числа от 0 до 256 (два в восьмой степени, в одном байте 8 бит, а один бит может принимать два значения: ноль или единицу), если столбец без знаковый, если столбец знаковый, то в него можно записать числа от -128 до 127 (один бит уйдет на знак).
Выберете удобный для себя способ, чтобы оставить комментарий