Sql типы данных: какие бывают и как с ними работать
Содержание
Различные типы данных в SQL
Не все типы значений, содержащиеся в полях таблицы, логически одинаковы. Наиболее очевидны различия между числами и текстом. Невозможно расположить числа в алфавитном порядке или извлечь одно имя из другого. Поскольку системы реляционных баз данных основаны на связях между частями информации, различные типы данных должны явно отличаться друг от друга, чтобы можно было применить подходящие способы их обработки и сравнения.
В SQL каждому полю приписывается «тип данных» (data type), который определяет, какого рода значения могут содержаться в поле. Все значения для данного поля должны быть одного типа.
Не все типы значений, содержащиеся в полях таблицы, логически одинаковы. Наиболее очевидны различия между числами и текстом. Невозможно расположить числа в алфавитном порядке или извлечь одно имя из другого. Поскольку системы реляционных баз данных основаны на связях между частями информации, различные типы данных должны явно отличаться друг от друга, чтобы можно было применить подходящие способы их обработки и сравнения.
В SQL каждому полю приписывается «тип данных» (data type), который определяет, какого рода значения могут содержаться в поле. Все значения для данного поля должны быть одного типа.
В таблице Customers, например, поля cname и city являются строками текста, тогда как поля rating, snum, cnum — числовые. Именно по этой причине невозможно занести значения «Highest» или «None» в поле rating, имеющее числовой тип. Это удачное ограничение, поскольку оно накладывает некоторую структуру на конкретные данные. Операцию сравнения, которая выполняется для одних строк и не выполняется для других, невозможно произвести, если значения поля имеют смешанный тип данных.
Определение этих типов данных является той областью, в которой многие коммерческие СУБД и официальный стандарт SQL имеют существенные различия. Стандарт ANSI SQL распознает только текстовый и числовой типы, тогда как многие коммерческие СУБД используют и другие специальные типы данных. Заметим, что типы DATE (дата) и TIME (время) почти de-facto являются стандартными (хотя конкретные их форматы отличаются). Некоторые СУБД поддерживают такие типы данных как MONEY (деньги) и BINARY (двоичный). (BINARY — это специальное числовое представление, используемое компьютером. Вся информация в компьютере представлена двоичными числами, затем она преобразуется в другие системы — так ее легче использовать и понимать.)
ANSI определяет несколько различных типов числовых значений. Сложность числовых типов ANSI объясняется, по крайне мере частично, попыткой поддержать совместимость вложенного SQL с множеством других языков.
Два типа данных ANSI, INTEGER и DECIMAL (для которых можно использовать аббревиатуру INT и DEC соответственно}, адекватны и теоретическим целям, и множеству практических приложений в деловой жизни. INTEGER отличается от DECIMAL тем, что запрещает использовать цифры справа от десятичной точки, а также саму десятичную точку.
Типом данных для текста является CHAR (CHARACTER), который относится к строке текста. Поле типа CHAR имеет фиксированную длину, равную максимальному числу букв, которые можно ввести в это поле. Большинство реализаций SQL имеет нестандартный тип, названный VARCHAR, — это текстовая строка любой длины вплоть до максимума, определяемого конкретной реализацией SQL. Значения CHAR и VARCHAR заключаются в одиночные кавычки, как, например, ‘текст’. Различие между ними состоит в том, что для типа CHAR отводится участок памяти, достаточный для хранения строки максимальной длины, а для VARCHAR память выделяется по мере необходимости.
Символьные типы состоят из всех символов, которые можно ввести с клавиатуры, в том числе и цифр. Однако, число 1 не есть то же самое, что символ ‘1 ‘. Символ ‘1’ это совсем другая часть печатного текста, которая не распознается компьютером как числовое значение 1. 1+1=2, но ‘1’ + ‘1’ не равно ‘2’. Значения типа CHARACTER хранятся в компьютере как двоичные значения, но для пользователя представляются в виде печатного текста. Преобразование выполняется в соответствии с форматом, определяемым той системой, которой вы пользуетесь. Это может быть формат одного из двух стандартных типов (возможно, с расширениями), которые применяются в компьютерных системах : ASCII (используется во всех персональных и большинстве малых компьютеров) и EBCDIC (используется для больших компьютеров). Определенные операции, такие как упорядочение значений поля по алфавиту, зависят от формата.
Тип DATE будет применяться в соответствии с требованиями рынка, а не ANSI. В реализациях SQL, не распознающих тип DATE, можно объявить дату символьным или числовым полем, но это затруднит выполнение множества операций. Следует ознакомиться с документацией по программному обеспечению SQL-системы, чтобы точно определить, какие типы данных она поддерживает.
Источник: SQL для простых смертных / Мартинн Грабер
С уважением, Артём Санников
Сайт: ArtemSannikov.ru
Метки: MySQL, База данных.
SQL – Типы данных
Тип данных в SQL, это атрибут, который определяет тип данных любого объекта. Каждый столбец, переменная и выражение связанных с типом данных в SQL.
Вы могли бы использовать эти типы данных при создании таблиц. Вы бы могли выбрать конкретный тип данных для столбца таблицы на основе ваших требований.
SQL Server предлагает шесть категорий типов данных для использования:
Точные типы числовых данных
ТИП ДАННЫХ | От | До |
---|---|---|
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 |
Примерные типы числовых данных
ТИП ДАННЫХ | От | До |
---|---|---|
float | -1.79E + 308 | 1.79E + 308 |
real | -3.40E + 38 | 3.40E + 38 |
Типы данных даты и времени
ТИП ДАННЫХ | От | До |
---|---|---|
datetime | 1 января 1753 | 31 декабря, 9999 |
smalldatetime | 1 января 1900 | 6 июня 2079 |
date | Сохраняет дату, как 30 июня 1991 года | |
time | Сохраняет время суток, как 12:30 |
Примечание — Здесь, дата и время имеет точность 3,33 миллисекунды , как и smalldatetime имеет 1 минуту точности.
Типы данных символьных строк
ТИП ДАННЫХ | Описание |
---|---|
char | Максимальная длина 8000 символов. (Фиксированная длина без Unicode символов) |
varchar | Максимум 8000 символов. (Переменная длина данных не-Unicode). |
varchar(max) | Максимальная длина 231 символов, переменная длина данных не Unicode (SQL Server 2005). |
text | Переменная длина данных, не Unicode с максимальной длиной 2147483647 символов. |
Типы строк данных символов Unicode
ТИП ДАННЫХ | Описание |
---|---|
nchar | Максимальная длина 4000 символов. (Фиксированная длина Unicode) |
nvarchar | Максимальная длина 4000 символов. (Переменная длина Unicode) |
nvarchar(max) | Максимальная длина 231 символов (SQL Server 2005). (Переменная длина Unicode) |
ntext | Максимальная длина 1,073,741,823 символов. (Переменная длина Unicode) |
Двоичные типы данных
ТИП ДАННЫХ | Описание |
---|---|
binary | Максимальная длина 8000 байт (фиксированная длина двоичных данных) |
varbinary | Максимальная длина 8000 байт. (Переменной длины двоичных данных) |
varbinary(max) | Максимальная длина 231 байт (SQL Server 2005). (Переменная длина двоичные данные) |
image | Максимальная длина 2147483647 байт. (Переменная длина двоичных данных) |
Другие типы данных
ТИП ДАННЫХ | Описание |
---|---|
sql_variant | Сохраняет значение различных типов данных SQL Server с поддержкой, за исключением текста, ntext и timestamp. |
timestamp | Хранит уникального номер базы данных, который обновляется каждый раз, когда строка получает обновление |
uniqueidentifier | Хранит уникальный глобальный идентификатор (GUID) |
xml | Хранит XML данные. Вы можете хранить экземпляры XML в столбце или переменной (SQL Server 2005). |
cursor | Ссылка на объект курсора |
table | Хранит набор результатов для последующей обработки |
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Тип данных | Описание |
---|---|
INT | Тип данных INT хранит целочисленные значения. Он может содержать целые числа, например количество товаров на складе или размещенные заказы. INT Значения могут находиться в диапазоне от -2147483648 до 2147483647. |
BIGINT | Тип данных BIGINT хранит большие целые числа. Его можно использовать для хранения целых чисел, превышающих диапазон значений, которые могут храниться в типе данных INT . БОЛЬШОЙ 9Значения 0015 могут находиться в диапазоне от -9223372036854775808 до 9223372036854775807. |
SMALLINT | хранит меньшие целые числа. Его можно использовать для хранения целых чисел, меньших диапазона значений, которые могут храниться в типе данных INT . SMALLINT Значения могут находиться в диапазоне от -32768 до 32767. |
TINYINT | Тип данных TINYINT хранит очень маленькие целые числа. Его можно использовать для хранения целых чисел, меньших, чем диапазон значений, которые могут быть сохранены в SMALLINT тип данных. TINYINT значения могут находиться в диапазоне от 0 до 255. |
NUMERIC | Тип данных NUMERIC хранит точные числовые значения с фиксированной точностью и масштабом. Точность — это общее количество цифр в числе, а масштаб — это количество цифр справа от десятичной точки. Например, 124,56 имеет точность 5 и масштаб 2. |
ДЕСЯТИЧНОЕ | 9Тип данных 0014 DECIMAL аналогичен типу данных NUMERIC , в котором хранятся точные числовые значения с фиксированной точностью и масштабом. Важно отметить, что NUMERIC и DECIMAL являются синонимами в SQL, и разработчик должен выбрать, какой из них использовать. |
FLOAT | Тип данных FLOAT хранит приблизительные числовые значения в представлении с плавающей запятой. Он может хранить очень большие или крошечные числа с большим количеством цифр до и после запятой. |
REAL | Тип данных REAL хранит приблизительные числовые значения в представлении с плавающей запятой. Он похож на тип данных FLOAT , но использует меньше битов для представления значения, что означает меньший диапазон и меньшую точность. |
DOUBLE PRECISION | Тип данных DOUBLE PRECISION хранит приблизительные числовые значения в представлении с плавающей запятой, подобно 9. 0014 FLOAT и REAL типов данных. DOUBLE PRECISION часто используется для хранения чисел с плавающей запятой с более высокой точностью, чем тип данных FLOAT . |
CHAR | Тип данных CHAR хранит строки символов фиксированной длины. Он может содержать фиксированное количество символов, определяемое длиной поля. Например, поле CHAR(10) может хранить строку длиной до 10 символов. Если вставляемая строка короче указанной длины, оставшиеся символы будут заполнены пробелами. |
VARCHAR | Тип данных VARCHAR хранит строки символов переменной длины. Он может содержать переменное количество символов, определяемое длиной поля. Например, поле VARCHAR(10) может хранить строку длиной до 10 символов. Если вставленная строка короче указанной длины, она будет использовать только необходимый объем памяти. |
ТЕКСТ | Тип данных ТЕКСТ хранит строки символов переменной длины, аналогичные Тип данных VARCHAR . Он может хранить большое количество символьных данных, а максимальная длина поля TEXT обычно намного больше, чем у поля VARCHAR . Точная максимальная длина поля TEXT может варьироваться в зависимости от конкретной используемой реализации SQL. |
DATE | Тип данных DATE хранит значения дат. Его можно использовать для хранения даты, которая включает день, месяц и год. Он определяется как ДАТА и используется для хранения информации о дате, такой как дата рождения, дата приема на работу, дата заказа и т. д. Формат значения ДАТА может варьироваться в зависимости от конкретной используемой реализации SQL, но обычно он соответствует формату «ГГГГ- ММ-ДД», где ГГГГ представляет год, ММ представляет месяц, а ДД представляет день. |
ВРЕМЯ | Тип данных ВРЕМЯ хранит значения времени. Он может хранить время, которое включает в себя часы, минуты и секунды. Он может хранить такую информацию, как открытие, закрытие, прибытие, отъезд и т. д. Формат ВРЕМЯ Значение может варьироваться в зависимости от конкретной используемой реализации SQL, но обычно оно соответствует формату «ЧЧ:ММ:СС», где ЧЧ представляет часы, ММ представляет минуты, а СС представляет секунды. |
DATETIME | Тип данных DATETIME хранит значения даты и времени. Его можно использовать для хранения даты и времени, включая день, месяц, год и время, состоящее из часов, минут и секунд. Он определяется как DATETIME и используется для хранения информации о дате и времени, такой как время начала, время окончания и отметка времени. Формат значения DATETIME может различаться в зависимости от конкретной реализации SQL, но обычно он соответствует формату «ГГГГ-ММ-ДД ЧЧ:ММ:СС». |
TIMESTAMP | В SQL тип данных TIMESTAMP хранит значения даты и времени, подобно типу данных DATETIME . Его можно использовать для хранения даты, которая включает день, месяц, год и время, состоящее из часов, минут и секунд. Он определяется как TIMESTAMP , в котором хранится информация о дате и времени, такая как время начала, время окончания и отметка времени. Формат значения TIMESTAMP может различаться в зависимости от конкретной используемой реализации SQL. Некоторые реализации обеспечивают автоматическую инициализацию и обновление для столбцов TIMESTAMP . |
YEAR | Тип данных YEAR хранит значения года. Его можно использовать для хранения года, который включает четыре цифры, представляющие год. Он определяется как YEAR и используется для хранения информации о году, такой как год рождения, год найма и т. д. |
BINARY | Тип данных BINARY хранит двоичные данные фиксированной длины. Он сравним с типом данных CHAR, но содержит двоичные значения вместо строк символов. Тип данных BINARY требует указания фиксированной длины и может использоваться для хранения любых двоичных данных, таких как изображения, аудио или другие двоичные файлы. |
VARBINARY | Тип данных VARBINARY хранит двоичные данные переменной длины. Он похож на тип данных VARCHAR , но содержит двоичные значения вместо строк символов. Тип данных VARBINARY требует указания максимальной длины и может использоваться для хранения любых двоичных данных, таких как изображения, аудио или другие двоичные файлы. |
BLOB | Тип данных BLOB (Большой двоичный объект) хранит обширные двоичные данные, такие как изображения, аудио или другие двоичные файлы. Он может содержать большое количество двоичных данных, а максимальный размер 9Поле 0014 BLOB может различаться в зависимости от конкретной используемой реализации SQL. BLOB обычно используется для хранения данных, которые не являются символьными или строковыми данными. |
BOOLEAN | Тип данных BOOLEAN хранит значения true/false или yes/no. Он может содержать только два возможных значения: ИСТИНА , ЛОЖЬ , ДА или НЕТ . Он определяется как BOOLEAN и используется для хранения логических значений. Точное представление BOOLEAN Значение может варьироваться в зависимости от конкретной используемой реализации SQL, но обычно оно соответствует формату « TRUE », или « FALSE », или « 1 », или « 0 », или « YES ». » или « № «. |
ENUM | Тип данных ENUM хранит предопределенный набор значений. Это строковый объект со значением, выбранным из списка разрешенных значений, указанных при создании таблицы. Он похож на строковый объект, но имеет более строгие ограничения, поскольку допускает только значения, включенные в список разрешенных значений. |
МАССИВ | Тип данных МАССИВ хранит упорядоченный набор элементов. Это многомерный массив переменного размера, который может содержать список значений с одним и тем же типом данных. Элементы массива могут быть любого типа данных, например, целые числа, строки или другие сложные типы данных. Размер массива не фиксирован и может изменяться динамически. |
JSON | Тип данных JSON хранит данные JSON (нотация объекта JavaScript). Это облегченный формат обмена данными, который легко читать и писать людям, а машинам — анализировать и генерировать. |
JSONB | Тип данных JSONB хранит двоичное представление данных JSON (нотация объектов JavaScript). JSONB (двоичный JSON) — это оптимизированный двоичный формат данных JSON. Он похож на тип данных JSON , но хранит данные в двоичном формате, что делает его более эффективным с точки зрения хранения и поиска. JSONB также предоставляет дополнительные функции, такие как возможности индексирования и поиска в данных JSON. |
UUID | Тип данных UUID (универсальный уникальный идентификатор) хранит значения уникальных идентификаторов. Это 128-битное значение, представленное в виде шестнадцатеричной строки, обычно в формате «XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX». Он спроектирован так, чтобы иметь очень низкую вероятность того, что одно и то же значение будет сгенерировано дважды, отсюда и термин «универсально уникальный». |
IP-АДРЕС | Тип данных IP-АДРЕС хранит значения адресов интернет-протокола (IP). Это строковое представление IP-адреса, обычно в формате «xxx.xxx.xxx.xxx» для адресов IPv4 и «xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx» для адресов IPv6. |
CIDR | Тип данных CIDR (бесклассовая междоменная маршрутизация) хранит сетевые IP-адреса в компактном представлении. Это строковое представление сетевого IP-адреса, обычно в формате «xxx.xxx.xxx.xxx/yy» для IPv4-адресов и «xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx/yy». для адресов IPv6. «yy» представляет количество битов IP-адреса, используемое для идентификации сети, также называемое длиной префикса. |
Типы данных SQL с примерами
Типы данных SQL используются для указания типа данных, которые может хранить столбец или переменная. Несмотря на некоторое совпадение с типами данных в языках программирования общего назначения, таких как Python или Java, типы данных SQL имеют свои собственные уникальные особенности и использование.
3 типа данных SQL
Символьные/строковые типы данных используются для хранения буквенно-цифровых символов в базе данных.
Числовые типы данных используются для хранения числовых значений в базе данных.
Типы данных и времени для хранения значений даты и времени в базе данных.
Мы обсудим различные типы данных SQL, включая символьные/строковые типы данных, числовые типы данных, типы данных даты и времени, символьные/строковые типы данных Unicode, двоичные типы данных и некоторые другие типы данных SQL.
В качестве примера рассмотрим пример одной таблицы погоды, в которой каждая строка представляет ежедневную запись погоды в определенном городе.
Еще от Max ReynoldsПояснение различий между SOQL и SQL
Символьные и строковые типы данных SQL
Символьные/строковые типы данных SQL используются для хранения буквенно-цифровых символов в базе данных. Наиболее часто используемые из них — CHAR
и VARCHAR
. Тип данных CHAR
используется для хранения строк символов фиксированной длины, а тип данных VARCHAR
используется для хранения строк переменной длины. При добавлении VARCHAR
или CHAR
, вы указываете максимально допустимое количество символов.
Переменная «состояние» в нашей погоде — отличный кандидат на CHAR(2)
, потому что мы можем представить каждое состояние двухбуквенным кодом. CHAR Данные
всегда сохраняются с использованием одного и того же количества символов. Если введена более короткая строка, она будет дополнена справа пробелами. Когда длина строки одинаковая или почти одинаковая, CHAR
может быть лучшим выбором, потому что 1) он не требует сохранения данных о длине в каждой записи и 2) не нужно вычислять длину при чтении и записи данных. С другой стороны, если длина строки более изменчива (например, для нашего столбца города), 963-1. В нашем примере с погодой I NT
работает для переменной wind_speed, если нам не нужна десятичная точность.
Тип данных FLOAT
может хранить десятичные числа с точностью до 23 цифр. Если мы хотим хранить десятичные числа с более высокой точностью, мы можем использовать тип данных DECIMAL
или NUMERIC
. Эти типы данных позволяют нам указать точность и масштаб десятичных чисел, что означает, что мы можем контролировать количество цифр до и после десятичной точки.
В общем случае следует использовать DECIMAL
, когда необходимо обеспечить точные десятичные значения без аппроксимации, и FLOAT
, когда у вас большой диапазон значений и допустима аппроксимация.
Типы данных даты и времени
Даты и время в SQL обычно хранятся с использованием DATE
, TIME
, DATETIME
и TIMESTAMP
. Тип данных DATE
используется для хранения значения даты в формате 9. 0014 «ГГГГ-ММ-ДД» , тип данных TIME
используется для хранения точного значения времени в формате «ЧЧ:ММ:СС»
, а тип данных DATETIME
используется для хранения обоих значения даты и времени в формате «ГГГГ-ММ-ДД ЧЧ:ММ:СС»
.
TIMESTAMP
обычно имеет такой же формат, как DATETIME
. TIMESTAMP
преобразуется и сохраняется как UTC в базе данных, в отличие от DATETIME
, где это преобразование не происходит. Это различие может быть важным, если база данных используется в разных часовых поясах. Если нам нужно рассчитать разницу во времени между часовыми поясами (например, в двух разных записях или между записью и «текущим» временем), TIMESTAMP
, вероятно, лучший вариант.
Символьные/строковые типы данных Unicode
Если вы хотите использовать символы из других языков, например, если мы хотим расширить нашу таблицу погоды, включив в нее названия городов со всего мира, нам нужно подумать, как использовать символы Unicode. В некоторых системах управления базами данных, таких как SQL Server, существуют определенные типы данных, такие как NVARCHAR
и NCHAR
(аналогично VARCHAR
и CHAR
), в которых хранятся символы Юникода. В других, таких как MySQL, набор символов CHAR и Столбцы VARCHAR
могут быть специально настроены для включения определенных кодировок UTF.
Типы двоичных данных
Двоичные данные, такие как изображения, GIF-файлы, PDF-файлы или аудиофайлы, могут храниться с использованием различных типов двоичных данных. Наиболее часто используемые типы двоичных данных: BINARY
, VARBINARY
и BLOB
. Различия между двоичными типами немного выходят за рамки этой статьи, и в большинстве случаев имеет смысл использовать для хранения файловую систему, а не базу данных.
Подробнее о SQL10 Лучшие инструменты для редактирования SQL на рынке
Другие типы данных SQL
В дополнение к типам данных, упомянутым выше, SQL также имеет несколько других типов данных, которые используются для определенных целей.