SQL - Типы данных. Типы данных SQL

SQL - Типы данных. Типы данных SQL

16.08.2019

Тип данных определяет, какое значение может содержать столбец: целочисленные данные, символьные данные, денежные данные, данные даты и времени, двоичные строки и т. д.

Типы данных SQL

Каждый столбец в таблице базы данных должен иметь имя и тип данных.

Разработчик SQL должен решить, какой тип данных будет храниться внутри каждого столбца при создании таблицы. Тип данных является ориентиром для SQL, чтобы понять, какой тип данных ожидается внутри каждого столбца, а также определяет, как SQL будет взаимодействовать с сохраненными данными.

Список типов данных MySQL

В MySQL существует три основных типа данных: текст, число и дата.

Типы текстовых данных

Тип Описание
CHAR(size) Удерживает строку фиксированной длины (может содержать буквы, цифры и специальные символы). Фиксированный размер указан в скобках. Может хранить до 255 символов
VARCHAR(size) Удерживает строку переменной длины (может содержать буквы, цифры и специальные символы). Максимальный размер указан в скобках. Может хранить до 255 символов. Если вы ставите большее значение, чем 255, оно будет преобразовано в тип TEXT
TINYTEXT Удерживает строку длиной не более 255 символов
TEXT Удерживает строку с максимальной длиной 65535 символов
BLOB Для BLOB (Binary Large OBjects). Сохраняет до 65535 байт данных
MEDIUMTEXT Удерживает строку с максимальной длиной 16,777,215 символов
MEDIUMBLOB Для BLOB (Binary Large OBjects). Удерживает до 16 777 215 байт данных
LONGTEXT Удерживает строку с максимальной длиной 4 294 967 295 символов
LONGBLOB Для BLOB (Binary Large OBjects). Сохраняет до 4 294 967 295 байтов данных
ENUM(a,b,c,etc.)

Позвольте ввести список возможных значений. Вы можете перечислить до 65535 значений в списке ENUM. Если вставлено значение, которое отсутствует в списке, будет добавлено пустое значение.
Примечание. Значения сортируются в том порядке, в котором вы их вводите.

Вы вводите возможные значения в этом формате: ENUM ("a", "b", "c")

SET Подобно ENUM, за исключением того, что SET может содержать до 64 элементов списка и может хранить несколько вариантов

Типы числовых данных

Тип Описание
TINYINT(size) От -128 до 127. От 0 до 255 UNSIGNED *. Максимальное количество цифр может быть указано в круглых скобках
SMALLINT(size) -32768 до 32767 нормально. 0 до 65535 UNSIGNED*. Максимальное количество цифр может быть указано в скобках
MEDIUMINT(size) -8388608 до 8388607 normal. 0 до 16777215 UNSIGNED*. Максимальное количество цифр может быть указано в скобках
INT(size) -2147483648 до 2147483647 normal. 0 до 4294967295 UNSIGNED*. Максимальное количество цифр может быть указано в скобках
BIGINT(size) -9223372036854775808 до 9223372036854775807 normal. 0 до 18446744073709551615 UNSIGNED *. Максимальное количество цифр может быть указано в скобках
FLOAT(size,d) Небольшое число с плавающей запятой. Максимальное количество цифр может быть указано в параметре размера. Максимальное количество цифр справа от десятичной точки указано в параметре d
DOUBLE(size,d) Большое число с плавающей запятой. Максимальное количество цифр может быть указано в параметре размера. Максимальное количество цифр справа от десятичной точки указано в параметре d
DECIMAL(size,d) DOUBLE хранится как строка, позволяющая фиксированную десятичную точку. Максимальное количество цифр может быть указано в параметре размера. Максимальное количество цифр справа от десятичной точки указано в параметре d

UNSIGNED - дополнительный параметр целочисленного типа. Обычно целое число переходит от отрицательного к положительному. Добавление атрибута UNSIGNED будет перемещать этот диапазон вверх так, чтобы он начинался с нуля вместо отрицательного числа.

Последнее обновление: 12.07.2017

При создании таблицы для всех ее столбцов необходимо указать определенный тип данных. Тип данных определяет, какие значения могут храниться в столбце, сколько они будут занимать места в памяти.

Язык T-SQL предоставляет множество различных типов. В зависимости от характера значений все их можно разделить на группы.

Числовые типы данных

    BIT : хранит значение 0 или 1. Фактически является аналогом булевого типа в языках программирования. Занимает 1 байт.

    TINYINT : хранит числа от 0 до 255. Занимает 1 байт. Хорошо подходит для хранения небольших чисел.

    SMALLINT : хранит числа от –32 768 до 32 767. Занимает 2 байта

    INT : хранит числа от –2 147 483 648 до 2 147 483 647. Занимает 4 байта. Наиболее используемый тип для хранения чисел.

    BIGINT : хранит очень большие числа от -9 223 372 036 854 775 808 до 9 223 372 036 854 775 807, которые занимают в памяти 8 байт.

    DECIMAL : хранит числа c фиксированной точностью. Занимает от 5 до 17 байт в зависимости от количества чисел после запятой.

    Данный тип может принимать два параметра precision и scale: DECIMAL(precision, scale) .

    Параметр precision представляет максимальное количество цифр, которые может хранить число. Это значение должно находиться в диапазоне от 1 до 38. По умолчанию оно равно 18.

    Параметр scale представляет максимальное количество цифр, которые может содержать число после запятой. Это значение должно находиться в диапазоне от 0 до значения параметра precision. По умолчанию оно равно 0.

    NUMERIC : данный тип аналогичен типу DECIMAL.

    SMALLMONEY : хранит дробные значения от -214 748.3648 до 214 748.3647. Предназначено для хранения денежных величин. Занимает 4 байта. Эквивалентен типу DECIMAL(10,4) .

    MONEY : хранит дробные значения от -922 337 203 685 477.5808 до 922 337 203 685 477.5807. Представляет денежные величины и занимает 8 байт. Эквивалентен типу DECIMAL(19,4) .

    FLOAT : хранит числа от –1.79E+308 до 1.79E+308. Занимает от 4 до 8 байт в зависимости от дробной части.

    Может иметь форму опредеения в виде FLOAT(n) , где n представляет число бит, которые используются для хранения десятичной части числа (мантиссы). По умолчанию n = 53.

    REAL : хранит числа от –340E+38 to 3.40E+38. Занимает 4 байта. Эквивалентен типу FLOAT(24) .

Примеры числовых столбцов: Salary MONEY, TotalWeight DECIMAL(9,2), Age INT, Surplus FLOAT

Типы данных, представляющие дату и время

    DATE : хранит даты от 0001-01-01 (1 января 0001 года) до 9999-12-31 (31 декабря 9999 года). Занимает 3 байта.

    TIME : хранит время в диапазоне от 00:00:00.0000000 до 23:59:59.9999999. Занимает от 3 до 5 байт.

    Может иметь форму TIME(n) , где n представляет количество цифр от 0 до 7 в дробной части секунд.

    DATETIME : хранит даты и время от 01/01/1753 до 31/12/9999. Занимает 8 байт.

    DATETIME2 : хранит даты и время в диапазоне от 01/01/0001 00:00:00.0000000 до 31/12/9999 23:59:59.9999999. Занимает от 6 до 8 байт в зависимости от точности времени.

    Может иметь форму DATETIME2(n) , где n представляет количество цифр от 0 до 7 в дробной части секунд.

    SMALLDATETIME : хранит даты и время в диапазоне от 01/01/1900 до 06/06/2079, то есть ближайшие даты. Занимает от 4 байта.

    DATETIMEOFFSET : хранит даты и время в диапазоне от 0001-01-01 до 9999-12-31. Сохраняет детальную информацию о времени с точностью до 100 наносекунд. Занимает 10 байт.

Распространенные форматы дат:

    yyyy-mm-dd - 2017-07-12

    dd/mm/yyyy - 12/07/2017

    mm-dd-yy - 07-12-17

    В таком формате двузначные числа от 00 до 49 воспринимаются как даты в диапазоне 2000-2049. А числа от 50 до 90 как диапазон чисел 1950 - 1999.

    Month dd, yyyy - July 12, 2017

Распространенные форматы времени:

  • hh:mi am/pm - 1:21 pm

    hh:mi:ss - 1:21:34

    hh:mi:ss:mmm - 1:21:34:12

    hh:mi:ss:nnnnnnn - 1:21:34:1234567

Строковые типы данных

    CHAR : хранит строку длиной от 1 до 8 000 символов. На каждый символ выделяет по 1 байту. Не подходит для многих языков, так как хранит символы не в кодировке Unicode.

    Количество символов, которое может хранить столбец, передается в скобках. Например, для столбца с типом CHAR(10) будет выделено 10 байт. И если мы сохраним в столбце строку менее 10 символов, то она будет дополнена пробелами.

    VARCHAR : хранит строку. На каждый символ выделяется 1 байт. Можно указать конкретную длину для столбца - от 1 до 8 000 символов, например, VARCHAR(10) . Если строка должна иметь больше 8000 символов, то задается размер MAX, а на хранение строки может выделяться до 2 Гб: VARCHAR(MAX) .

    Не подходит для многих языков, так как хранит символы не в кодировке Unicode.

    В отличие от типа CHAR если в столбец с типом VARCHAR(10) будет сохранена строка в 5 символов, то в столце будет сохранено именно пять символов.

    NCHAR : хранит строку в кодировке Unicode длиной от 1 до 4 000 символов. На каждый символ выделяется 2 байта. Например, NCHAR(15)

    NVARCHAR : хранит строку в кодировке Unicode. На каждый символ выделяется 2 байта.Можно задать конкретный размер от 1 до 4 000 символов: . Если строка должна иметь больше 4000 символов, то задается размер MAX, а на хранение строки может выделяться до 2 Гб.

Еще два типа TEXT и NTEXT являются устаревшими и поэтому их не рекомендуется использовать. Вместо них применяются VARCHAR и NVARCHAR соответственно.

Примеры определения строковых столбцов:

Email VARCHAR(30), Comment NVARCHAR(MAX)

Бинарные типы данных

    BINARY : хранит бинарные данные в виде последовательности от 1 до 8 000 байт.

    VARBINARY : хранит бинарные данные в виде последовательности от 1 до 8 000 байт, либо до 2^31–1 байт при использовании значения MAX (VARBINARY(MAX)).

Еще один бинарный тип - тип IMAGE является устаревшим, и вместо него рекомендуется применять тип VARBINARY.

Остальные типы данных

    UNIQUEIDENTIFIER : уникальный идентификатор GUID (по сути строка с уникальным значением), который занимает 16 байт.

    TIMESTAMP : некоторое число, которое хранит номер версии строки в таблице. Занимает 8 байт.

    CURSOR : представляет набор строк.

    HIERARCHYID : представляет позицию в иерархии.

    SQL_VARIANT : может хранить данные любого другого типа данных T-SQL.

    XML : хранит документы XML или фрагменты документов XML. Занимает в памяти до 2 Гб.

    TABLE : представляет определение таблицы.

    GEOGRAPHY : хранит географические данные, такие как широта и долгота.

    GEOMETRY : хранит координаты местонахождения на плоскости.

Для начала разберём что такое «типы данных».
Типы данных определяют: какие значения могут храниться в столбце и сколько они будут занимать места в памяти. При создании таблицы для всех ее столбцов необходимо указать определенный тип данных.
Основные используемые в SQL типы можно условно разделить на несколько категорий:

  • Целочисленные типы;
  • Дробные типы;
  • Символьные типы;
  • Денежные типы;
  • Временные типы(дата/время);

Целочисленные типы данных

Дробные типы данных

Символьный тип данных

Тип данных Описание
CHAR(size) Используется для хранения строк. Параметр в скобках позволяет фиксировать длину хранимой строки. Максимальный размер в байтах, который можно задать для строки, – 255.
VARCHAR (size) Аналогично предыдущему типу позволяет хранить строки длиной до 255 символов. Однако отличие от CHAR в том, что для хранения значения данного типа выделяется требуемое количество памяти. То есть для строки, состоящей из 5-ти символов, потребуется 6 байт памяти. В первом же случае память для значения будет выделена согласно указанному параметру.
NCHAR(size) Строковые данные постоянной длины в Юникоде. n определяет длину строки и должно иметь значение от 1 до 4000. Размер при хранении составляет удвоенное значение size в байтах. Рекомендуется использовать nchar, если размеры элементов данных в столбцах предполагаются сходные.
NVARCHAR
(size| max)
Строковые данные переменной длины в Юникоде. Size определяет длину строки и может иметь значение от 1 до 4000. Значение max указывает, что максимальный размер при хранении составляет 2^31-1 символов (2 ГБ). Рекомендуется использовать nvarchar, если размеры элементов данных в столбцах предполагаются различные.
TEXT Данные переменной длины не в Юникоде в кодовой странице сервера и с максимальной длиной строки 2^31-1 (2 147 483 647).
NTEXT Данные переменной длины в кодировке Юникод с максимальной длиной строки 2^30 - 1 (1 073 741 823) байт.

Денежный тип данных

Временные типы(дата/время)

Тип данных Описание
DATE Главное предназначение - хранение даты в формате ГОД-МЕСЯЦ-ДЕНЬ (“ГГГГ-MM-ДД” или "уууу-mm-dd").
TIME Позволяет заносить в ячейку таблицы временные значения. Все значения задаются форматом «hh:mm:ss».
DATETIME Объединяет функции предыдущих двух типов. Формат хранения представлен следующим образом: «уууу-mm-dd hh:mm:ss».
TIMESTAMP Сохраняет дату и время, исчисляемое количеством секунд, прошедших начиная с полуночи 1.01.1970 года и до заданного значения.

Примеры использования типов данных

Рассмотрим на примере, как использовать типы данных в SQL.

An example of using data types

MySQL

CREATE TABLE Checks(id INT NOT NULL, Name VARCHAR (50) NOT NULL, DataToDay DATE NOT NULL, Cost FLOAT NOT NULL);

id является счётчиком(она хранит в себе индивидуальный номер чека), следовательно принадлежит к целочисленному типу данных, поэтому делаем её INT или же INTEGER. NOT NULL говорит о том, что переменная не может быть пустой.
В Name будем хранить название товара. Так как столбец будет хранить символы используем VARCHAR . После указания типа выделяем память, под название(в нашем случаи это (50) ).
Следующие столбцы таблицы создаются по аналогии.

Приводимый ниже список показывает, что Microsoft SQL Server поддерживает большинство типов данных SQL 2003. Также SQL Server поддерживает дополнительные типы данных, используемые для однозначной идентификации строк данных в таблице и на многих серверах, например UNIQUEIDENTIFIER, что соответствует аппаратной философии «роста в ширину», исповедуемой Microsoft (то есть внедрение базы на множестве серверов на платформах Intel), вместо «роста в высоту» (то есть внедрение на одном огромном мощном UNIX сервере или Windows Data Center Server).

Интересное отступление, касающееся дат на SQL Server: SQL Server поддерживает даты начиная с 1753 года. Вы не можете хранить более ранние даты ни в одном типе данных базы SQL Server. Почему? Причина в том, что англоговорящий мир начал использовать григорианский календарь в 1753 году (до сентября 1753 года использовался юлианский календарь), а преобразование дат юлианского календаря в григорианский могло оказаться весьма сложным.

BIGINT (тип данных SQL 2003: BIGINT)

Хранит целые числа со знаком и без знака в диапазоне от -9 223 372 036 854 775 808 до 9 223 372 036 854 775 807. Занимает 8 байт. Смотрите тип INT, где указаны правила свойства IDENTITY, также применимые к типу BIGINT.

BINARY[(n)](тип данных SQL 2003: BLOB)

Хранит двоичное значение фиксированной длины от 1 до 8000 байт. Значение типа BINARY занимает n + 4 байта.

BIT (тип данных SQL 2003: BOOLEAN)

Хранит значения 1, 0 или NULL, которое обозначает «unknown». В одном байте может храниться до 8 значений из столбцов типа BIT таблицы. В еще одном байте можно разместить дополнительные 8 значений типа BIT. Столбцы типа BIT нельзя индексировать.

CHAR[(n)], CHARACTER[(n)] (тип данных SQL 2003: CHARACTER(n))

Хранит символьные данные фиксированной длины от 1 до 8000 символов. Все неиспользованное место по умолчанию заполняется пробелами. (Автоматическое заполнение пробелами можно отключить.) Тип занимает п байт.

CURSOR (тип данных SQL 2003: отсутствует)

Специальный тип данных, используемый для описания курсора в форме переменной или параметра хранимой процедуры OUTPUT. Тип нельзя использовать в инструкции CREATE TABLE. Тип CURSOR может принимать значение NULL.

DATETIME (тип данных SQL 2003: TIMESTAMP)

Хранит значение даты и времени в диапазоне с 01-01-1753 00:00:00 до 31-12-9999 23:59:59. Для хранения требуется 8 байт.

DECIMAL (p. s). DEC (p, s), NUMERIC (p, s) (тип данных SQL 2003: DECIMAL (p, s). NUMERIC (p. s))

Хранит десятичные дроби длиной до 38 цифр. Значения р и s определяют, соответственно, точность и масштаб. Масштаб по умолчанию равен 0. Занимаемое значением место определяется используемой точностью. При точности 1-9 используется 5 байт. При точности 10-19 используется 9 байт. При точности 20-28 используется 13 байт. При точности 29-39 используется 17 байт.

Смотрите тип INT, где указаны правила свойства IDENTITY, также применимые к типу DECIMAL.

DOUBLE PRECISION (тип данных SQL 2003: отсутствует) Синоним FLOAT(53).

FLOAT[(n)] (тип данных SQL 2003: FLOAT, FLOAT(п))

Хранит значения с плавающей точкой в диапазоне от-1.79Е + 308 до 1.79Е + 308. Точность, определяемая параметром п, может изменяться в пределах от 1 до 53. Для хранения 7 цифр (и - от 1 до 24) требуется 4 байта. Значения, превышающие 7 цифр, занимают 8 байт.

IMAGE (тип данных SQL 2003: BLOB)

Хранит двоичное значение переменной длины до 2 147 483 647 байт. Этот тип данных часто используется для хранения графики, звука и файлов, таких, как документы Microsoft Word и электронные таблицы Microsoft Excel. Значениями типа IMAGE нельзя свободно манипулировать. Столбцы типа IMAGE и ТОТимеют множество ограничений на способы использования. Смотрите описание типа TEXT, где приведен список команд и функций, которые применимы и к типу IMAGE.

INT (тип данных SQL 2003: INTEGER)

Хранит целые числа со знаком или без знака в диапазоне от -2 147 483 648 до 2 147 483 647. Занимает 4 байта. Все целочисленные типы данных, а также типы, хранящие десятичные дроби, поддерживают свойство IDENTITY, identity - это автоматически инкрементируемый идентификатор строки. Обращайтесь к разделу «Инструкция CREATE/ALTERTABLE».

MONEY (тип данных SQL 2003: отсутствует)

Хранит денежные значения в диапазоне от -922337203685477.5808 до 922337203685477.5807. Значение занимает 8 байт.

NCHAR(n), NATIONAL CHAR(n), NATIONAL CHARACTER) (тип данных SQL 2003: NATIONAL СИARACTER(n))

Хранит данные формата UNICODE фиксированной длины до 4000 символов. Для хранения требуется n*2 байт.

NTEXT, NATIONAL TEXT(тип данных SQL 2003: NCLOB)

Хранит фрагменты текста в формате UNICODE длиной до 1 073 741 823 символа. Смотрите описание типа TEXT, где приведен список команд и функций, которые применимы и к типу NTEXT.

Синоним типа DECIMAL. Смотрите описание типа INT, где приведены правила, относящиеся к свойству IDENTITY.

NVARCHAR(n), NATIONAL CHAR VARYING(n), NATIONAL CHARACTER VARYING(n) (тип данных SQL 2003: NATIONAL CHARACTER VARYING(n))

Хранит UNICODE-данные переменной длины до 4000 символов. Занимаемое место вычисляется как удвоенное значение длины всех символов, вставленных в поле (число символов * 2). В SQL Server системный параметр SET ANSI_PADDING] для полей NCHAR и NVARCHAR всегда установлен (ON).

REAL, FLOAT(24)(mun данных SQL 2003: REAL)

Хранит значения с плавающей точкой в диапазоне -3.40Е+38 до 3.40Е+38. Занимает 4 байта. Тип REAL функционально эквивалентен типу FLOAT(24).

ROWVERSION (тип данных SQL 2003: отсутствует)

Уникальное число, хранимое в базе данных, которое обновляется всякий раз, когда обновляется строка, В более ранних версиях называется TIMESTAMP.

SMALLDATETIME (тип данных SQL 2003: отсутствует)

Хранит дату и время в диапазоне от "01-01-1900 00:00" до "06-06-2079 23:59" с точностью до минуты. (Минуты округляются до меньшего значения, если значение секунд 29.998 и менее, в противном случае они округляются до большего значения.) Значение занимает 4 байта.

SMALLINT (тип данных SQL 2003: SMALLINT)

Хранит целые числа со знаком или без знака в диапазоне от -32 768 до 32 767. Занимает 2 байта. Смотрите описание типа INT, где приведены правила, относящиеся к свойству IDENTITY, которые также применимы и к этому типу.

SMALLMONEY (тип данных SQL 2003: отсутствует)

Хранит денежные значения в диапазоне от 214748.3648 до -214748.3647. Значения занимают 4 байта.

SQL VARIANT (тип данных SQL 2003: отсутствует)

Хранит значения, относящиеся к другим поддерживаемым SQL Server типам данных, за исключением типов TEXT, NTEXT, ROWVERSION и других значений типа SQL_VARIANT. Может хранить до 8016 байт данных, поддерживаются значения NULL и DEFAULT. Тип SQL_VARIANTиспользуется в столбцах, параметрах, переменных и возвращаемых функциями и хранимыми процедур, ми значениях.

TABLE (тип данных SQL 2003: отсутствует)

Специальный тип, хранящий получившийся в результате работы последнего процесса набор данных. Используется исключительно для процедурной обработки и не может применяться в инструкциях CREATE TABLE. Этот тип данных уменьшает необходимость создания временных таблиц во многих приложениях. Может уменьшить необходимость перекомпиляций процедур, ускоряя, таким образом, выполнение хранимых процедур и пользовательских функций.

TEXT (тип данных SQL 2003: CLOB)

Хранит очень большие фрагменты текста длиной до 2 147 483 647 символов. Значениями типа ТЕХТн IMAGE часто гораздо труднее манипулировать, чем, скажем, значениями типа VARCHAR. Например, нельзя создавать индекс по столбцу типа TEXT или IMAGE. Значениями типа TEXT можно манипулировать при помощи функций DATALENGTH, PATINDEX, SUBSTRING. TEXTPTR и ТЕХ-TVALID, а также команд READTEXT, SET TEXTSIZE, UPDATETEXT и WR1TETEXT.

TIMESTAMP (тип данных SQL 2003: TIMESTAMP)

Хранит автоматически генерируемое двоичное число, обеспечивающее уникальность в текущей базе данных и, следовательно, отличающееся от типа данных TIMESTAMP стандарта ANSI. Тип TIMESTAMP занимает 8 байт. В настоящее время вместо TIMESTAMP для однозначной идентификации строк лучше применять значения типа ROWVERSION.

Хранит целые числа без знака в диапазоне от 0 до 255 и занимает 1 байт. Смотрите описание типа /Л/Г, где приведены правила, относящиеся к свойству IDENTITY, которые также применимы и к этому типу.

UNIQUEIDENTIFIER (тип данных SQL 2003: отсутствует)

Представляет собой значение, уникальное для всех баз данных и всех серверов. Представлено в виде хххххххх-хххх-хххх-хххх-хххххххххххх, в котором каждый «х» представляет собой шестнадцатеричное число в диапазоне 0-9 или а - f. Единственными операциями, которые можно производить над значениями этого типа, являются сравнение и проверка на NULL. В столбцах этого типа можно использовать ограничения и свойства, за исключением свойства IDENTITY.

VARBINARY[(п)] (тип данных SQL 2003: BLOB)

Представляет собой двоичное значение переменной длины, до 8000 байт. Занимаемое место соответствует размеру вставленных данных плюс 4 байта.

VARCHARf[(n)], CHAR VARYING [(п)], CHARACTER VARYING f(n)J (тип данных SQL 2003: CHARACTER VARYING [(n)]

Хранит символьные данные фиксированной длины размером от 1 до 8000 символов. Занимаемое место равно реальному размеру введенного значения в байтах, а не значению п.

В данной публикации мы рассмотрим типы данных в SQL . Хочу обратить ваше внимание на то, что различные СУБД поддерживает различный набор типов данных, поэтому это публикация включает в себя самые часто встречающиеся типы данных в SQL реализации различных СУБД.

Важно знать, чтобы правильно и грамотно проектировать базы данных, правильно выбранный типа данных в SQL может очень сильно облегчить работу другим разработчикам. Поэтому не советую вам пропускать раздел о типах данных и всегда, когда вы знакомитесь с новой , обращать внимание на типы данных, которые поддерживает программа и на то, как она эти типы данных обрабатывает.

Рассмотрим типы данных, которые есть в языке SQL. У каждого столбца таблицы (у атрибута) должен быть тип данных для значений, которые хранятся в столбце. Тип данных для столбца определяется при создании таблицы, а еще лучше, когда он определяется на этапе .

Язык SQL делит данные на пять типов:

  1. Целочисленный тип данных SQL.
  2. Вещественный тип данных SQL.
  3. Типы данных даты и времени SQL.
  4. Строковый тип данных SQL.
  5. Строковый тип данных 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 , как и целочисленный тип данных, целиком и полностью зависит от реализации СУБД.

Строковый тип данных SQL

Строковых типов данных в SQL может быть гораздо больше, смотрите спецификацию своей СУБД, чтобы узнать какой тип данных может быть использован для строковых значений.

Тип данных SQL Описание
char Максимальная длина 8000 символов (все значения в столбце имеют фиксированный размер, указанный при объявлении столбца). Обратите внимание: единица измерения SQL типа данных char - символ.
varchar Максимальная длина 8000 символов (все значения в столбце имеют различный размер в зависимости от количества символов, но не более того размера, что был указан при объявлении столбца). Обратите внимание: единица измерения SQL типа данных varchar - символ.
varchar (max) 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 (один бит уйдет на знак).



© 2024 beasthackerz.ru - Браузеры. Аудио. Жесткий диск. Программы. Локальная сеть. Windows