Какие типы данных в mysql позволяют хранить строковые значения
При определении столбцов таблицы для них необходимо указать тип данных. Каждый столбец должен иметь тип данных. Тип данных определяет, какие значения могут храниться в столбце, сколько они будут занимать места в памяти.
MySQL предоставляет следующие типы данных, которые можно разбить на ряд групп.
Символьные типы
- CHAR : представляет строку фиксированной длины. Длина хранимой строки указывается в скобках, например, CHAR(10) — строка из десяти символов. И если в таблицу в данный столбец сохраняется строка из 6 символов (то есть меньше установленной длины в 10 символов), то строка дополняется 4 пробелами и в итоге все равно будет занимать 10 символов Тип CHAR может хранить до 255 байт.
- VARCHAR : представляет строку переменной длины. Длина хранимой строки также указыватся в скобках, например, VARCHAR(10) . Однако в отличие от CHAR хранимая строка будет занимать именно столько места, сколько необходимо. Например, если определенная длина в 10 символов, но в столбец сохраняется строка в 6 символов, то хранимая строка так и будет занимать 6 символов плюс дополнительный байт, который хранит длину строки. Всего тип VARCHAR может хранить до 65535 байт.
Начиная с MySQL 5.6 типы CHAR и VARCHAR по умолчанию используют кодировку UTF-8, которая позволяет использовать до 3 байт для хранения символа в зависимости от языка ( для многих европейских языков по 1 байту на символ, для ряда восточно-европейских и ближневосточных — 2 байта, а для китайского, японского, корейского — по 3 байта на символ).
Ряд дополнительных типов данных представляют текст неопределенной длины:
- TINYTEXT : представляет текст длиной до 255 байт.
- TEXT : представляет текст длиной до 65 КБ.
- MEDIUMTEXT : представляет текст длиной до 16 МБ
- LONGTEXT : представляет текст длиной до 4 ГБ
Числовые типы
- TINYINT : представляет целые числа от -128 до 127, занимает 1 байт
- BOOL : фактически не представляет отдельный тип, а является лишь псевдонимом для типа TINYINT(1) и может хранить два значения 0 и 1. Однако данный тип может также в качестве значения принимать встроенные константы TRUE (представляет число 1) и FALSE (предоставляет число 0). Также имеет псевдоним BOOLEAN .
- TINYINT UNSIGNED : представляет целые числа от 0 до 255, занимает 1 байт
- SMALLINT : представляет целые числа от -32768 до 32767, занимает 2 байтa
- SMALLINT UNSIGNED : представляет целые числа от 0 до 65535, занимает 2 байтa
- MEDIUMINT : представляет целые числа от -8388608 до 8388607, занимает 3 байта
- MEDIUMINT UNSIGNED : представляет целые числа от 0 до 16777215, занимает 3 байта
- INT : представляет целые числа от -2147483648 до 2147483647, занимает 4 байта
- INT UNSIGNED : представляет целые числа от 0 до 4294967295, занимает 4 байта
- BIGINT : представляет целые числа от -9 223 372 036 854 775 808 до 9 223 372 036 854 775 807, занимает 8 байт
- BIGINT UNSIGNED : представляет целые числа от 0 до 18 446 744 073 709 551 615, занимает 8 байт
- DECIMAL : хранит числа с фиксированной точностью. Данный тип может принимать два параметра precision и scale : DECIMAL(precision, scale) . Параметр precision представляет максимальное количество цифр, которые может хранить число. Это значение должно находиться в диапазоне от 1 до 65. Параметр scale представляет максимальное количество цифр, которые может содержать число после запятой. Это значение должно находиться в диапазоне от 0 до значения параметра precision. По умолчанию оно равно 0. Например, в определении следующего столбца:
salary DECIMAL(5,2)
Типы для работы с датой и временем
- DATE : хранит даты с 1 января 1000 года до 31 деабря 9999 года (c «1000-01-01» до «9999-12-31»). По умолчанию для хранения используется формат yyyy-mm-dd. Занимает 3 байта.
- TIME : хранит время от -838:59:59 до 838:59:59. По умолчанию для хранения времени применяется формат «hh:mm:ss». Занимает 3 байта.
- DATETIME : объединяет время и дату, диапазон дат и времени — с 1 января 1000 года по 31 декабря 9999 года (с «1000-01-01 00:00:00» до «9999-12-31 23:59:59»). Для хранения по умолчанию используется формат «yyyy-mm-dd hh:mm:ss». Занимает 8 байт
- TIMESTAMP : также хранит дату и время, но в другом диапазоне: от «1970-01-01 00:00:01» UTC до «2038-01-19 03:14:07» UTC. Занимает 4 байта
- YEAR : хранит год в виде 4 цифр. Диапазон доступных значений от 1901 до 2155. Занимает 1 байт.
Тип Date может принимать даты в различных форматах, однако непосредственно для хранения в самой бд даты приводятся к формату «yyyy-mm-dd». Некоторые из принимаемых форматов:
- yyyy-mm-dd — 2018-05-25
- yyyy-m-dd — 2018-5-25
- yy-m-dd — 18-05-25 В таком формате двузначные числа от 00 до 69 воспринимаются как даты в диапазоне 2000-2069. А числа от 70 до 99 как диапазон чисел 1970 — 1999.
- yyyymmdd — 20180525
- yyyy.mm.dd — 2018.05.25
Для времени тип Time использует 24-часовой формат. Он может принимать время в различных форматах:
- hh:mi — 3:21 (хранимое значение 03:21:00 )
- hh:mi:ss — 19:21:34
- hhmiss — 192134
Примеры значений для типов DATETIME и TIMESTAMP:
- 2018-05-25 19:21:34
- 2018-05-25 (хранимое значение 2018-05-25 00:00:00 )
Составные типы
- ENUM : хранит одно значение из списка допустимых значений. Занимает 1-2 байта
- SET : может хранить несколько значений (до 64 значений) из некоторого списка допустимых значений. Занимает 1-8 байт.
Бинарные типы
- TINYBLOB : хранит бинарные данные в виде строки длиной до 255 байт.
- BLOB : хранит бинарные данные в виде строки длиной до 65 КБ.
- MEDIUMBLOB : хранит бинарные данные в виде строки длиной до 16 МБ
- LONGBLOB : хранит бинарные данные в виде строки длиной до 4 ГБ
Какие типы данных в mysql позволяют хранить строковые значения
MySQL поддерживает несколько типов столбцов, которые можно разделить на три категории: числовые типы данных, типы данных для хранения даты и времени и символьные (строковые) типы данных. В данном разделе вначале дается обзор всех возможных типов и приводятся требования по хранению для каждого типа столбца, затем свойства типов описываются более подробно по каждой категории. Мы намеренно сделали обзор кратким, поскольку более детальные описания требуют дополнительной информации о конкретных типах столбцов, например, о допустимых форматах представления величин.
Ниже перечислены типы столбцов, поддерживаемые MySQL. В описаниях используются следующие обозначения:
M Указывает максимальный размер вывода. Максимально допустимый размер вывода составляет 255 символов. D Употребляется для типов данных с плавающей точкой и указывает количество разрядов, следующих за десятичной точкой. Максимально возможная величина составляет 30 разрядов, но не может быть больше, чем M -2.
Квадратные скобки ( `[‘ и `]’ ) указывают для типа данных группы необязательных признаков.
Заметьте, что если для столбца указать параметр ZEROFILL , то MySQL будет автоматически добавлять в этот столбец атрибут UNSIGNED .
Предупреждение: следует помнить, что при выполнении вычитания между числовыми величинами, одна из которых относится к типу UNSIGNED , результат будет беззнаковым! See section 6.3.5 Функции приведения типов.
- Все арифметические операции выполняются с использованием значений BIGINT или DOUBLE со знаком, так что не следует использовать беззнаковые целые числа больше чем 9223372036854775807 (63 бита), кроме операций, выполняемых логическими функциями. В противном случае несколько последних разрядов результата могут оказаться ошибочными из-за ошибок округления при преобразовании BIGINT в DOUBLE . MySQL 4.0 может обрабатывать данные типа BIGINT в следующих случаях:
- Использование целых чисел для хранения больших беззнаковых величин в столбце с типом BIGINT .
- В случаях MIN(big_int_column) и MAX(big_int_column) .
- При использовании операторов ( `+’ , `-‘ , `*’ и т.д.), когда оба операнда являются целыми числами.
Главы
- 6.2.1 Числовые типы данных
- 6.2.2 Типы данных даты и времени
- 6.2.2.1 Проблема 2000 года и типы данных
- 6.2.2.2 Типы данных DATETIME , DATE и TIMESTAMP
- 6.2.2.3 Тип данных TIME
- 6.2.2.4 Тип данных YEAR
- 6.2.3.1 Типы данных CHAR и VARCHAR
- 6.2.3.2 Типы данных BLOB и TEXT
- 6.2.3.3 Тип перечисления ENUM
- 6.2.3.4 Тип множества SET
Типы данных в MySQL
Когда вы создаёте таблицы в MySQL, приходится указывать тип данных для каждого столбца. Это необходимо для того, чтобы определить, какие именно данные можно туда добавлять, каким образом они будут обрабатываться и сколько места займут. MySQL поддерживает типы данных SQL нескольких видов: числовые, типы даты и времени, строковые (символьные и байтовые) типы, пространственные типы и JSON типы данных. В статье подробно разберём, какие типы данных есть в MySQL.
Числовые типы
MySQL поддерживает все базовые числовые типы данных SQL. Сюда входят как точные числовые типы данных, так и приблизительные, включая целые, с фиксированной запятой и с плавающей запятой. Кроме того, MySQL также имеет тип данных BIT, используемый для хранения битовых значений. Основная масса числовых данных может быть как знаковой так и беззнаковой, но это не касается типа BIT.
Типы данных в 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-формате.
В отличие от хранения объектов в виде текста, в использовании специального типа данных есть несколько преимуществ:
- Валидация JSON-объектов. Если попытаться сохранить неправильный JSON, MySQL сгенерирует ошибку.
- Возможность нативно работать с JSON, выбирать и обновлять только отдельные части объектов, а не весь объект целиком.
- MySQL сохраняет тип JSON в специальном внутреннем формате. Такой способ более производительный, чем работа с JSON в виде строки.
Составные типы
Строковые типы данных, которые могут хранить значения только из заранее определенного списка. Несмотря на то, что список значений состоит из строк, в самих таблицах хранятся только числа, которые ассоциированы со справочником возможных значений. Поэтому они занимают мало места.
- ENUM может хранить только одно значение из списка, занимает 1-2 байта.
- SET может хранить одновременно до 64 значений из списка, занимает от 1 до 8 байт.
Заключение
Мы рассмотрели основные типы данных и полей в MySQL, объяснили разницу между схожими типами. Теперь вы можете создавать свои структуры БД, используя полученные знания.
Создание базы данных в MySQL
