Перейти к содержимому

Какие типы значений существуют

  • автор:

Какие типы значений существуют

Ранее мы рассматривали следующие элементарные типы данных: int, byte, double, string, object и др. Также есть сложные типы: структуры, перечисления, классы. Все эти типы данных можно разделить на типы значений, еще называемые значимыми типами, (value types) и ссылочные типы (reference types). Важно понимать между ними различия.

  • Целочисленные типы ( byte, sbyte, short, ushort, int, uint, long, ulong )
  • Типы с плавающей запятой ( float, double )
  • Тип decimal
  • Тип bool
  • Тип char
  • Перечисления enum
  • Структуры ( struct )
  • Тип object
  • Тип string
  • Классы ( class )
  • Интерфейсы ( interface )
  • Делегаты ( delegate )

В чем же между ними различия? Для этого надо понять организацию памяти в .NET. Здесь память делится на два типа: стек и куча (heap). Параметры и переменные метода, которые представляют типы значений, размещают свое значение в стеке. Стек представляет собой структуру данных, которая растет снизу вверх: каждый новый добавляемый элемент помещается поверх предыдущего. Время жизни переменных таких типов ограничено их контекстом. Физически стек — это некоторая область памяти в адресном пространстве.

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

class Program < static void Main(string[] args) < Calculate(5); >static void Calculate(int t) < int x = 6; int y = 7; int z = y + t; >>

При запуске такой программы в стеке будут определяться два фрейма — для метода Main (так как он вызывается при запуске программы) и для метода Calculate:

Структура стека в языке программирования C#

При вызове этого метода Calculate в его фрейм в стеке будут помещаться значения t, x, y и z. Они определяются в контексте данного метода. Когда метод отработает, область памяти, которая выделялась под стек, впоследствии может быть использована другими методами.

Причем если параметр или переменная метода представляет тип значений, то в стеке будет храниться непосредсвенное значение этого параметра или переменной. Например, в данном случае переменные и параметр метода Calculate представляют значимый тип — тип int, поэтому в стеке будут храниться их числовые значения.

Ссылочные типы хранятся в куче или хипе, которую можно представить как неупорядоченный набор разнородных объектов. Физически это остальная часть памяти, которая доступна процессу.

При создании объекта ссылочного типа в стеке помещается ссылка на адрес в куче (хипе). Когда объект ссылочного типа перестает использоваться, в дело вступает автоматический сборщик мусора: он видит, что на объект в хипе нету больше ссылок, условно удаляет этот объект и очищает память — фактически помечает, что данный сегмент памяти может быть использован для хранения других данных.

Так, в частности, если мы изменим метод Calculate следующим образом:

static void Calculate(int t)

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

Ссылочные типы в куче в языке программирования C#

Составные типы

Теперь рассмотим ситуацию, когда тип значений и ссылочный тип представляют составные типы — структуру и класс:

State state1 = new State(); // State — структура, ее данные размещены в стеке Country country1 = new Country(); // Country — класс, в стек помещается ссылка на адрес в хипе // а в хипе располагаются все данные объекта country1 struct State < public int x; public int y; >class Country

Здесь в методе Main в стеке выделяется память для объекта state1. Далее в стеке создается ссылка для объекта country1 ( Country country1 ), а с помощью вызова конструктора с ключевым словом new выделяется место в хипе ( new Country() ). Ссылка в стеке для объекта country1 будет представлять адрес на место в хипе, по которому размещен данный объект..

Ссылычные типы и типы значений в C#

Таким образом, в стеке окажутся все поля структуры state1 и ссылка на объект country1 в хипе.

Но, допустим, в структуре State также определена переменная ссылочного типа Country. Где она будет хранить свое значение, если она определена в типе значений?

State state1 = new State(); Country country1 = new Country(); struct State < public int x; public int y; public Country country; public State() < x = 0; y = 0; country = new Country(); >> class Country

Значение переменной state1.country также будет храниться в куче, так как эта переменная представляет ссылочный тип:

Стек и куча в языке программирования C#

Копирование значений

Тип данных надо учитывать при копировании значений. При присвоении данных объекту значимого типа он получает копию данных. При присвоении данных объекту ссылочного типа он получает не копию объекта, а ссылку на этот объект в хипе. Например:

State state1 = new State(); // Структура State State state2 = new State(); state2.x = 1; state2.y = 2; state1 = state2; state2.x = 5; // state1.x=1 по-прежнему Console.WriteLine(state1.x); // 1 Console.WriteLine(state2.x); // 5 Country country1 = new Country(); // Класс Country Country country2 = new Country(); country2.x = 1; country2.y = 4; country1 = country2; country2.x = 7; // теперь и country1.x = 7, так как обе ссылки и country1 и country2 // указывают на один объект в хипе Console.WriteLine(country1.x); // 7 Console.WriteLine(country2.x); // 7

Так как state1 — структура, то при присвоении state1 = state2 она получает копию структуры state2. А объект класса country1 при присвоении country1 = country2; получает ссылку на тот же объект, на который указывает country2. Поэтому с изменением country2, так же будет меняться и country1.

Ссылочные типы внутри типов значений

Теперь рассмотрим более изощренный пример, когда внутри структуры у нас может быть переменная ссылочного типа, например, какого-нибудь класса:

State state1 = new State(); State state2 = new State(); state2.country.x = 5; state1 = state2; state2.country.x = 8; // теперь и state1.country.x=8, так как state1.country и state2.country // указывают на один объект в хипе Console.WriteLine(state1.country.x); // 8 Console.WriteLine(state2.country.x); // 8 struct State < public int x; public int y; public Country country; public State() < x = 0; y = 0; country = new Country(); // выделение памяти для объекта Country >> class Country

Переменные ссылочных типов в структурах также сохраняют в стеке ссылку на объект в хипе. И при присвоении двух структур state1 = state2; структура state1 также получит ссылку на объект country в хипе. Поэтому изменение state2.country повлечет за собой также изменение state1.country.

Объекты классов как параметры методов

Организацию объектов в памяти следует учитывать при передаче параметров по значению и по ссылке. Если параметры методов представляют объекты классов, то использование параметров имеет некоторые особенности. Например, создадим метод, который в качестве параметра принимает объект Person:

Person p = new Person < name = "Tom", age = 23 >; ChangePerson(p); Console.WriteLine(p.name); // Alice Console.WriteLine(p.age); // 23 void ChangePerson(Person person) < // сработает person.name = "Alice"; // сработает только в рамках данного метода person = new Person < name = "Bill", age = 45 >; Console.WriteLine(person.name); // Bill > class Person

При передаче объекта класса по значению в метод передается копия ссылки на объект. Эта копия указывает на тот же объект, что и исходная ссылка, потому мы можем изменить отдельные поля и свойства объекта, но не можем изменить сам объект. Поэтому в примере выше сработает только строка person.name = «Alice» .

А другая строка person = new Person < name = "Bill", age = 45 >создаст новый объект в памяти, и person теперь будет указывать на новый объект в памяти. Даже если после этого мы его изменим, то это никак не повлияет на ссылку p в методе Main, поскольку ссылка p все еще указывает на старый объект в памяти.

Но при передаче параметра по ссылке (с помощью ключевого слова ref ) в метод в качестве аргумента передается сама ссылка на объект в памяти. Поэтому можно изменить как поля и свойства объекта, так и сам объект:

Person p = new Person < name = "Tom", age = 23 >; ChangePerson(ref p); Console.WriteLine(p.name); // Bill Console.WriteLine(p.age); // 45 void ChangePerson(ref Person person) < // сработает person.name = "Alice"; // сработает person = new Person < name = "Bill", age = 45 >; > class Person

Операция new создаст новый объект в памяти, и теперь ссылка person (она же ссылка p из метода Main) будет указывать уже на новый объект в памяти.

Какие типы данных существуют в программировании

Когда классифицируете типы данных, легче определить, где они хранятся и для каких операций применяются.

Типы данных в программировании

Анастасия Хамидулина
Автор статьи
1 августа 2023 в 12:01

Данные — это зафиксированные сведения, с которыми работает компьютер: получает, обрабатывает и передает. В программировании есть несколько видов данных. Новичкам нужно разбираться в данных, чтобы быстрее научиться кодить и понимать алгоритмы.

Что такое тип данных, зачем он нужен

Переменные в математике классифицируют по ключевым характеристикам:

  • вещественные;
  • комплексные;
  • логические;
  • отдельные значения;
  • множества значений;
  • множества множеств.

Тип — это характеристика значений, которые переменная или выражение принимает. Функция тоже может сформировать тип.

Типизация — процесс определения типа информационными сущностями. Она бывает нескольких видов:

  • статическая — заранее назначает и проверяет;
  • динамическая — всё делает в процессе;
  • статично-динамическая — совмещает оба предыдущих типа.

По назначению типов:

  • сильная — навсегда;
  • слабая — допускает изменения.

Многие языки программирования типизированы частично. Если типизация слабая, то можно и отступиться от правил систематизации типов. Программы со слабой типизацией проще сделать более эффективными. Но из-за слабой типизации в коде может появиться много ошибок — багов.

На курсах Skypro, например «Java-разработчик», учат писать чистый код, а еще самостоятельно тестировать его, находить и исправлять ошибки. В результате напишете несколько приложений, которые можно положить в портфолио.

Какие бывают типы данных

Основополагающее понятие в программировании — это виды данных. Классификация помогает определить, где они хранятся, что собой представляют и для каких операций применяются.

✔️ Логические

Этот тип данных основан на логике и может иметь два значения: false (ложь) или true (правда). В языках С# и C++ это bool, а в Java — boolean.

✔️ Целочисленные

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

У беззнаковых данных диапазон в два раза больше, чем у знаковых. Это происходит из-за компьютерного восприятия. В знаковых типах бит отражает знак числа, где ноль — положительное значение, а единица — отрицательное.

Учитывая восприятие компьютерными устройствами целого значения, в ячейке памяти из n бит может храниться и 2n-1 для знаковых типов, и 2n — для беззнаковых.

Еще одна классификация типов данных:

  • Тип short, или короткий целый. Занимает в ячейке памяти 16 бит, то есть 2 байта (216 = 65 536).
  • Тип long. Ему отводится 64 бита = 8 байт (264 = 1,8 446 744 * 1019).

✔️ Числа с плавающей запятой

Плавающая запятая — форма представления действительных чисел, где число хранится в форме мантиссы и показателя степени. Если говорить на языке программирования, то каждое число может быть представлено в следующей форме:

где X — записываемое число;

Например: 1 592 916 = 1,592 916 ∗ 10 6 ; 0,00027,459 = 27,459 ∗ 10 -5 . На мониторе вы увидите следующие значения:

В предназначенном месте памяти хранится целое число фиксированной длины и последовательность вносимого значения.

✔️ Строковые

Строка string в JavaScript — часть текста или определенный заведомо установленный порядок знаков. Их закавычивают.

Отдельные языки применяют специальный вид данных в программировании, с его помощью заносят символ. Например, в языке С — char.

✔️ Указатели

Указатель — это объект, который хранит определенный адрес в памяти компьютера. Значение указателя — это физический адрес определенных данных: указатель указывает на эти данные.

Получение данных по адресу, который хранится в указателе, называют разыменованием указателя. При создании указателя перед названием переменной добавляют *. Указатель может быть нулевым и не указывать ни на один объект.

✔️ Идентификационные

Конечный набор значений определяет перечисляемый тип. Как правило, его представляет список идентификаторов в объявлении типа.

Разберем пример на языке С++ (в С# и Java — аналогично):

В случае когда идентификатор указывается в списке значений перечисляемого типа, он становится наименованием константы, которая определена в блоке типа.

✔️ Абстрактные

У абстрактного типа данных (АТД) есть преимущества перед остальными типами:

  1. Инкапсуляция деталей реализации. Инкапсуляция — ограничение доступа к компонентам, составляющим объект. Достаточно один раз инкапсулировать, чтобы пользователь смог самостоятельно взаимодействовать с АТД через интерфейс. Если детали реализаций поменяют, то представления клиентов о работе не изменятся.
  2. Снижение уровня сложности через абстрагирование от деталей реализации. Это значит, что детали скрывают и сосредотачиваются на ключевых аспектах системы. Так можно сосредоточиться на том, что делает АТД.
  3. Ограничение области использования данных. Все данные структуры АТД не зависят от других участков кода.
  4. Высокая информативность интерфейса.

Примеры

  1. В языке Python используют следующие типы данных программирования:
  • int — целочисленный;
  • char — символьный;
  • bool — логический;
  • float — с плавающей запятой;
  • double — с плавающей запятой двойной точности.

Освойте Python на курсе от Skypro. Вас ждут 400 часов обучения и практики (достаточно десяти часов в неделю), подготовка проектов для портфолио, индивидуальная проверка домашних заданий и помощь опытных наставников. Получится, даже если у вас нет опыта в IT.

Разработчик на Python создает сайты и приложения

  1. Язык программирования JavaScript содержит следующие типы данных:
  • string — тип данных «строка»;
  • number — «число»;
  • object — тип данных, хранящий свойства и методы;
  • undefined — тип данных, значения которых не определены;
  • boolean — логический;
  • null — с «пустыми» значениями.

JavaScript можно изучить на курсе Skypro «Веб-разработчик». Программа построена от простого к сложному, в ней много практики. Уже к концу второго блока обучения сможете самостоятельно сделать лендинг с играми на JavaScript.

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

У типа данных может быть особенность параметризации с каким-либо другим типом, но строго подчиненная и соотнесенная с принципами абстракции и параметричности.

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

Пример. Чтобы функция сортировки последовательностей могла быть реализована, необязательно знать свойства всех элементов, которые ее составляют. Важен допуск операции по сравнению и анализу данных. Тогда параметр «последовательности» станет параметрически полиморфным. Составляющие такого типа будут определяться и использоваться не с конкретными типами, а с параметрами-типами. Но параметрически полиморфный тип может быть представлен как конструктор других любых типов. Он становится оператором над типами в арифметической реальности.

В программировании и информатике есть понятия «отражение», «рефлексивность» или «интроспекция». Они обозначают одно и то же — выявление метатипов в динамике.

Представление в компьютере

Реальное программирование отличается от формальной теории информации. Главное отличие — в изучении вопросов об эффективности.

Отличие заключается в понятии «число». Этот термин в науке об ЭВМ и на практике абсолютно неодинаков. Число на ЭВМ понимается как ячейка электронной памяти. Размер кластера зависит от архитектуры ЭВМ и диапазона значений числа. Он обязательно ограничен, а стоп-объем равен объему ячейки.

Целые и вещественные числа в ячейках представлены по-разному. Положительные или неотрицательные числа представляются непосредственно, а вот существенно отрицательные целые числа — в дополнительном коде.

типы значений многозначного слова

б) переносное значение — обладающее вторичной предметно-понятийной соотнесенностью, опосредованное прямым значением, семантически производным от него (напр., золотая листва – листва, обладающая цветом, подобно сделанному из золота);

2) по степени зависимости от контекста:

а) свободное значение – значение, не зависящее от контекста, от сочетаний с другими словами (напр., поле – пространство без леса);

б) связанное значение, понятное только в сочетании с другими словами, несамостоятельное значение (напр., поле шляпы – пространство по краю шляпы).

Словарь лингвистических терминов: Изд. 5-е, испр-е и дополн. — Назрань: Изд-во «Пилигрим» . Т.В. Жеребило . 2010 .

  • типы знаков
  • типы и способы синтаксических связей

Смотреть что такое «типы значений многозначного слова» в других словарях:

  • семантическая позиция слова — Условие употребления, реализации одного из значений многозначного слова, которое проявляется в сочетаемости с другими словами. Выделяются следующие типы семантических позиций: 1) сильная; 2) слабая … Термины и понятия лингвистики: Лексика. Лексикология. Фразеология. Лексикография
  • семантическая позиция слова — Условие употребления, реализации одного из значений многозначного слова, которое проявляется в сочетаемости с другими словами. Выделяются следующие типы семантических позиций: 1) сильная; 2) слабая … Словарь лингвистических терминов Т.В. Жеребило
  • Многозначность слова — полисемия, наличие у слова более чем одного значения, т. е. способность одного слова передавать различную информацию о предметах и явлениях внеязыковой действительности. Например, у слова горло 4 значения: передняя часть шеи; полость… … Большая советская энциклопедия
  • структура лексического значения слова — Слово имеет форму (план выражения, или означающее) и значение (план содержания, означаемое). Материально план выражения передается с помощью звуковой и графической оболочки, представленной грамматическими формами: роза, розы, розе и т.п. У… … Термины и понятия лингвистики: Лексика. Лексикология. Фразеология. Лексикография
  • структура лексического значения слова — Слово имеет форму (план выражения, или означающее) и значение (план содержания, означаемое). Материально план выражения передается с помощью звуковой и графической оболочки, представленной грамматическими формами: роза, розы, розе и т.п. У… … Словарь лингвистических терминов Т.В. Жеребило
  • Словарь — Словарь 1) лексика, словарный состав языка, диалекта, какой либо социальной группы, отдельного писателя и т. п. 2) Справочная книга, которая содержит слова (или морфемы, словосочетания, идиомы и т. п.), расположенные в определённом порядке… … Лингвистический энциклопедический словарь
  • СЕМАНТИКА — (франц. sémantique, от греч. sēmantikós — обозначающий, sema — знак), раздел семиотики и языкознания, исследующий значения знаков: слов и словосочетаний естественного языка (лингвистическая С.), поэтической речи (С. как часть поэтики),… … Литературный энциклопедический словарь
  • Апресян, Юрий Дереникович — В Википедии есть статьи о других людях с такой фамилией, см. Апресян. Юрий Дереникович Апресян … Википедия
  • Юрий Апресян — Юрий Дереникович Апресян (род. в 1930) российский лингвист, академик РАН (1992), профессор (1991), доктор филологических наук. Труды в области лексической семантики, синтаксиса, русской и английской лексикографии, истории лингвистики, машинного… … Википедия
  • Юрий Дереникович Апресян — (род. в 1930) российский лингвист, академик РАН (1992), профессор (1991), доктор филологических наук. Труды в области лексической семантики, синтаксиса, русской и английской лексикографии, истории лингвистики, машинного перевода и др. Один из… … Википедия

Типы данных в MySQL

В этой инструкции рассказываем про основные типы данных в MySQL и даем советы, где лучше использовать тот или иной тип.

Эта инструкция — часть курса «MySQL для новичков».

Смотреть весь курс

Введение

При создании таблиц в MySQL для каждого столбца нужно указывать тип данных. Он определяет, какие данные там могут храниться, как будут обрабатываться и сколько места будут занимать. В MySQL все типы данных делятся на несколько классов: числовые типы, символьные, дата/время и так далее. В каждом классе есть несколько типов данных, которые внешне могут быть похожи, но их поведение или принципы хранения отличаются. Важно выбрать правильный тип сразу при создании таблицы, потому что потом готовую структуру и приложения будет сложней переделать.

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

Возможности MySQL в «Облачных базах данных»

Числовые типы

Используются для хранения чисел. Бывают целочисленными, с плавающей точкой и с фиксированной точкой.

Целые числа

Хранят только целые числа, без дробной части. Делятся на signed (со знаком) и unsigned (без знака). Типы singed позволяют хранить как положительные, так и отрицательные значения. Типы unsigned хранят только положительные числа, но зато диапазон значений больше. Это может быть полезно в случаях, когда хранимые значения заведомо не могут быть отрицательным. Например, количество товара или идентификатор записи в таблице.

Тип Размер (байт) Диапазон signed Диапазон unsigned
TINYINT 1 -128 … 127 0 … 255
SMALLINT 2 -3 2768 … 32 767 0 … 65 535
MEDIUMINT 3 -8 388 608 … 8388607 0 … 16 777 215
INT 4 2 147 483 648 … 2 147 483 647 0 … 42 94 967 295
BIGINT 8 -2 63 … 2 63 -1 0 … 2 64 -1

Числа с плавающей точкой

Хранят приблизительные значения. Не резервируют определенное количество бит для целочисленной или дробной частей. Поэтому у всех значений в таблице количество до и после запятой будет разным.

Тип Размер (байт) Диапазон
FLOAT 4 -3.402823466E+38 … -1.175494351E-38 и 1.175494351E-38 … 3.402823466E+38
DOUBLE 8 -1.7976931348623157E+308 … -2.2250738585072014E-308 и2.2250738585072014E-308 … 1.7976931348623157E+308

До версии MySQL 8.0.17 эти типы данных поддерживали диапазон unsigned, но он работал не так, как с целыми числами. Беззнаковый диапазон просто запрещал сохранять отрицательные значения, при этом максимальное значение не увеличивалось. Начиная с версии 8.0.17, использование unsigned не рекомендуется и считается устаревшим. В будущих версиях MySQL поддержку беззнакового диапазона для этого типа данных могут вовсе удалить.

Числа с фиксированной точкой

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

В MySQL для хранения чисел с фиксированной точкой используются типы DECIMAL(M,D) и NUMERIC(M,D), но по факту это синонимы. Можно использовать любой из этих типов, результат будет одинаковым. В таких столбцах максимально можно хранить до 65 чисел вместе с целочисленной и дробной частями.

Символьные (строковые)

Символьные типы используются для хранения текстов. Есть два основных типа: CHAR и VARCHAR. С точки зрения пользователя они выглядят похоже, но MySQL хранит и обрабатывает их по-разному.

  • CHAR хранит строку фиксированной длины до 255 символов. Если длина вставляемой записи меньше, то MySQL автоматически дополняет значение пробелами. Например, если мы указали тип CHAR(10) и сохранили строку «Привет», то по факту в БД будет храниться строка «Привет » (обратите внимание на четыре пробела в конце строки).

Кажется, что это лишняя трата места. Но если во всех ваших записях хранятся строки примерно одной длины, то тип CHAR будет очень производительным. Например, его можно использовать для хранения хешей, у которых длина всегда одинакова.

  • VARCHAR хранит строки переменной длины до 65 535 символов. Причем в памяти хранится именно та длина, которая была указана при создании. VARCHAR занимает меньше места, чем CHAR, но подвержен фрагментации и из-за этого может проигрывать в скорости обработки данных.

Текстовые и бинарные

Текстовые (TEXT) и бинарные (BLOB) типы данных используются для хранения больших объемов текста или двоичных данных. Эти типы похожи, но отличаются по способу хранения и обработки внутри MySQL.

  • BLOB обрабатывается как двоичные данные. В нем не хранится набор символов, а операции сортировки и сравнения основаны на числовых значениях байтов.
  • TEXT обрабатывается как символьные строки. В нем хранится именно набор символов, а значения сортируются и сравниваются на основе сопоставления набора символов..

Текстовые типы отлично подходят для хранения больших текстов: статей, докладов и так далее. А бинарные типы могут хранить любые файлы или мультимедиа-контент.

Тип Размер (байт) Макс. размер символов
TINYTEXT / TINYBLOB 255 255
TEXT / BLOB 65 535 65 535
MEDIUMTEXT / MEDIUMBLOB 16 777 215 2 24 -1
LONGTEXT / LONGBLOB 4 294 967 295 2 32 -1

Кажется, что типы TINYTEXT и TEXT похожи на CHAR и VARCHAR. Но разница в том, что MySQL не умеет индексировать текстовые и бинарные типы и не может использовать индексы для сортировки.

Дата/время

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

Тип Размер (байт) Описание
DATE 3 Только дата в формате YYYY-MM-DD. Допустимые значения от 1000-01-01 до 9999-12-31
DATETIME 8 Дата и время в формате YYYY-MM-DD HH:MM:SS. Допустимые значения от 1000-01-01 00:00:00 до 9999-12-31 23:59:59
TIMESTAMP 4 Дата и время. Хранится в виде количества секунд, прошедших с 1 января 1970 года по гринвичу. Занимает в два раза меньше места, чем тип DATETIME. Но при этом диапазон ограничен значениями от 1970-01-01 00:00:01 до 2038-01-09 03:14:07
TIME 3 Только время в формате HH:MM:SS. Допустимые значения от 00:00:00 до 23:59:59
YEAR(N) 1 Только год в формате YYYY или YY. Допустимые значения от 1901 до 2155 или от 70 до 69 (1970 — 2069)

JSON

Это относительно новый тип данных, который появился в MySQL версии 5.7.8. Он позволяет нативно хранить и обрабатывать данные в JSON-формате.

В отличие от хранения объектов в виде текста, в использовании специального типа данных есть несколько преимуществ:

  1. Валидация JSON-объектов. Если попытаться сохранить неправильный JSON, MySQL сгенерирует ошибку.
  2. Возможность нативно работать с JSON, выбирать и обновлять только отдельные части объектов, а не весь объект целиком.
  3. MySQL сохраняет тип JSON в специальном внутреннем формате. Такой способ более производительный, чем работа с JSON в виде строки.

Составные типы

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

  • ENUM может хранить только одно значение из списка, занимает 1-2 байта.
  • SET может хранить одновременно до 64 значений из списка, занимает от 1 до 8 байт.

Заключение

Мы рассмотрели основные типы данных и полей в MySQL, объяснили разницу между схожими типами. Теперь вы можете создавать свои структуры БД, используя полученные знания.

Создание базы данных в MySQL

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *